定义个策略接口,不一样的实现类提供不一样的具体策略算法, 同时它们之间能够互相替换.html
IStrategy 接口定义了策略方法,Strategy1 和 Strategy2 经过实现 IStrategy 提供不一样的策略,而 User 组合了 IStrategy ,能够经过给 User 对象设置不一样具体实现类来让其得到不一样的策略java
策略模式.PNG
定义一个用以建立对象的工厂, 根据不一样的条件生成不一样的对象算法
注意简单工厂模式与策略模式是不一样的,工厂模式是根据给定的条件返回相应的对象,而策略模式是将不一样的策略对象传递给使用者以实现不一样策略,(好吧,我差点分不清了)详细不一样点分析可转这里安全
简单工厂模式.PNG
针对每一种产品提供一个工厂类,经过不一样的工厂实例来建立不一样的产品实例框架
与简单工厂模式不一样点是它要为每一种产品提供一个工厂类,不一样工厂类实现同一个工厂接口,返回不一样产品,详细分析可转这里ui
工厂模式.PNG
应对产品族概念而生spa
与工厂模式相比,抽象工厂模式是为了应对产品族.net
抽象工厂模式.PNG
动态的给一个对象添加一些额外的功能线程
ComponentImpl 和 Decorator 类都实现了 IComponent 接口,不一样的是 ComponentImpl 提供了具体实现,而 Decorator 是先聚合 ComponentImpl 接着在本身的实现方法即
operation()
方法中作些处理(即装饰)后再调用 ComponentImpl 对象的具体实现3d
装饰者模式.PNG
封装被代理对象并限制外界对被代理对象的访问
注意区分装饰者模式和代理模式的区别。在代理模式中,ComponentImpl 和 Proxy 类都实现了 IComponent 接口,Proxy 对象中虽然也维护着一个 ComponentImpl 对象,但通常状况下它是代理类本身初始化的,不像装饰者模式是经过
set
进去的,同时在接口方法即operation()
中代理对象会限制外界对被代理对象的访问,而装饰者模式是装饰者给被装饰者添加额外的行为,详细不一样点分析可转这里
代理模式.PNG
定义一个操做的算法骨架, 并将一些步骤延迟到子类中
AbsTemplate 抽象类中定义了一系列的方法,其中外界惟一能调用的
operation()
方法是 final 的(即不可重写),在该方法中分别调用了first()
、second()
、third()
方法(即搭好算法框架),子类经过继承抽象类重写不一样的方法来添加各自的行为
模板方法模式.PNG
为系统向外界提供一个统一的接口
Fracade 为 ComponentA 、ComponentB 、ComponentC 向外即 ClientA 、ClientB 提供统一的接口
外观模式.PNG
将一个类的接口转换成客户但愿的另外一个接口
好比项目引入第三方类库后应该先封装起来转换成本身须要的接口再使用,防止之后类库出现变动。AdapterA 先将 LibraryClass 封装起来,其对外提供的
operation()
方法中调用 LibraryClass 对象的方法,若之后换类库,只需改 AdapterA 类或者建立新的 Adapter 实现类便可
适配器模式.PNG
将抽象部分与实现部分分离,使它们均可以独立的变化
将本来要耦合的上下层抽象出来,上层和下层以组合的方式链接,而后上下层抽象可派生出许多不一样方向的子类。AbsShape 封装了 IDrawProgram 接口,这样它的子类想从 DPA 切换到 DPB 或者别的,只需
set
进去就行啦(你看,这 UML 图多像座桥)
桥接模式.PNG
注: 适配器、桥接与外观三模式之间关系
将一个复杂对象的构建与它的表示分离.
做为 Product 的内部类,Builder 统一了 Product 的整个构建过程,同时在
build
过程当中,能够因为set
值顺序不一样等缘由产生不一样的效果
建造者模式.PNG
定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象,在它的状态发生变化时,会通知全部的观察者.
先将 Observer 注册到 Observable ,那么当 Observable 状态改变时会通知它持有的全部 Observer ,对了,最好 Observable 中的 mList 的泛型是
WeakReference<Observer>
,防止内存泄漏
观察者模式.PNG
保证一个类仅有一个实例,并提供一个访问它的全局控制点.
下图是利用 Java 的语言特性实现的线程安全且能延迟初始化的单例模式,Singleton 中维护着静态私有的 SingleHolder 类, SingleHolder 类中持有个静态常量 sHolder ,Client 若经过 getSingleInstance 方法获取 Singleton 对象则直接返回 SingleHolder 类的 sHolder ,详细分析可转这里
将一个请求封装成为一个对象, 使能够用不一样的请求对客户进行参数化
Action 封装了具体行为,Command 封装了 Action 并提供空方法
execute()
,它的子类经过重写该方法可在方法里调用 mAction 不一样行为达到封装命令的目的,最后 Client 封装了一系列的 Command 对象,并能够经过notify()
方法一个接着一个调用所持有 Command 对象们的execute()
方法达到给 Action 传达命令的目的
命令模式.PNG