@@ -2036,16 +2036,16 @@ openssl_random_pseudo_bytes ( int $length [, bool &$crypto_strong ] ) : string
2036
2036
#### 优点
2037
2037
2038
2038
- 对唯一实例的受控访问
2039
- - 缩小名空间
2039
+ - 避免全局变量污染
2040
2040
- 允许对操作和表示精化
2041
- - 允许可变数据的实例
2041
+ - 允许可变数目的实例
2042
2042
- 比类操作更灵活
2043
2043
2044
2044
### 抽象工厂模式
2045
2045
2046
- 抽象工厂模式提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来。在正常使用中,客户端程序需要创建抽象工厂的具体实现,然后使用抽象工厂作为接口来创建这一主题的具体对象。客户端程序不需要知道(或关心)它从这些内部的工厂方法中获得对象的具体类型,因为客户端程序仅使用这些对象的通用接口。抽象工厂模式将一组对象的实现细节与他们的一般使用分离开来
2046
+ 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类
2047
2047
2048
- “工厂”是创建产品(对象) 的地方,其目的是将产品的创建与产品的使用分离。抽象工厂模式的目的,是将若干抽象产品的接口与不同主题产品的具体实现分离开。这样就能在增加新的具体工厂的时候,不用修改引用抽象工厂的客户端代码
2048
+ “工厂”是创建产品(对象) 的地方,其目的是将产品的创建与产品的使用分离。抽象工厂模式的目的,是将若干抽象产品的接口与不同主题产品的具体实现分离开。这样就能在增加新的具体工厂的时候,不用修改引用抽象工厂的客户端代码
2049
2049
2050
2050
#### 适用性
2051
2051
@@ -2064,7 +2064,7 @@ openssl_random_pseudo_bytes ( int $length [, bool &$crypto_strong ] ) : string
2064
2064
2065
2065
- 在产品族中扩展新的产品是很困难的,它需要修改抽象工厂的接口
2066
2066
2067
- ### 工厂方法
2067
+ ### 工厂方法模式
2068
2068
2069
2069
定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类
2070
2070
@@ -2076,17 +2076,58 @@ openssl_random_pseudo_bytes ( int $length [, bool &$crypto_strong ] ) : string
2076
2076
2077
2077
### 适配器模式
2078
2078
2079
+ 将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作
2080
+
2081
+ #### 适用性
2082
+
2083
+ - 你想使用一个已经存在的类,而它的接口不符合你的需求
2084
+ - 你想创建一个可以复用的类,改类可以与其他不相关的类或不可预见(可能不兼容)的类协同工作
2085
+ - 你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口
2086
+
2079
2087
### 观察者模式
2080
2088
2089
+ 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新
2090
+
2091
+ #### 适用性
2092
+
2093
+ - 当一个抽象模型有两个方面,其中一个方面依赖于另一方面。将这二者封装在独立的对象中以使它们可以各自独立地改变和复用
2094
+ - 当对一个对象的改变需要同时改变其它对象,而不知道具体有多少对象有待改变
2095
+ - 当一个对象必须通知其它对象,而它又不能假定其它对象是谁。换言之,你不知道这些对象时紧密耦合的
2096
+
2081
2097
### 策略模式
2082
2098
2083
- ### Autoload、Composer 原理
2099
+ 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化
2100
+
2101
+ #### 适用性
2102
+
2103
+ - 许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法
2104
+ - 需要使用一个算法的不同变体
2105
+ - 算法使用客户不应该知道的数据。避免暴露复杂的、与算法相关的数据结构
2106
+ - 一个类定义了多种行为,并且这些行为在类的操作中以多个条件语句的形式出现
2084
2107
2085
2108
### OOP 思想
2086
2109
2087
- ### 抽象类、接口 分别使用场景
2110
+ 面向对象程序设计(Object-oriented programming,OOP)是种具有对象概念的程序编程典范,同时也是一种程序开发的抽象方针
2111
+
2112
+ ### 抽象类和接口
2113
+
2114
+ 抽象类可以为项目提供一种组织机制。抽象类不能实例化,只能由具体(可实例化的类)继承抽象类的接口以及它的所有具体属性
2115
+
2116
+ 与大多数抽象类一样,接口也有抽象方法。不过,不能像在抽象类中那样在接口中包含具体方法或变量
2117
+
2118
+ ### 控制反转
2119
+
2120
+ ` 控制反转 ` (Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做` 依赖注入 ` (Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中
2121
+
2122
+ ### 依赖注入
2123
+
2124
+ 依赖注入是将所依赖的传递给将使用的从属对象(即客户端)。该服务是将会变成客户端的状态的一部分。 传递服务给客户端,而非允许客户端来建立或寻找服务
2125
+
2126
+ #### 实现方式
2088
2127
2089
- ### 依赖注入实现原理
2128
+ - 基于接口。实现特定接口以供外部容器注入所依赖类型的对象
2129
+ - 基于 set 方法。实现特定属性的 public set 方法,来让外部容器调用传入所依赖类型的对象
2130
+ - 基于构造函数。实现特定参数的构造函数,在新建对象时传入所依赖类型的对象
2090
2131
2091
2132
## 架构篇
2092
2133
0 commit comments