14种设计模式

  1. 策略模式( Strategy )

定义个策略接口,不一样的实现类提供不一样的具体策略算法, 同时它们之间能够互相替换.html

IStrategy 接口定义了策略方法,Strategy1 和 Strategy2 经过实现 IStrategy 提供不一样的策略,而 User 组合了 IStrategy ,能够经过给 User 对象设置不一样具体实现类来让其得到不一样的策略java


 
策略模式.PNG
  1. 简单工厂模式( Simple Factory )

定义一个用以建立对象的工厂, 根据不一样的条件生成不一样的对象算法

注意简单工厂模式与策略模式是不一样的,工厂模式是根据给定的条件返回相应的对象,而策略模式是将不一样的策略对象传递给使用者以实现不一样策略,(好吧,我差点分不清了)详细不一样点分析可转这里安全

 
简单工厂模式.PNG

 

  1. 工厂模式( Factory )

针对每一种产品提供一个工厂类,经过不一样的工厂实例来建立不一样的产品实例框架

与简单工厂模式不一样点是它要为每一种产品提供一个工厂类,不一样工厂类实现同一个工厂接口,返回不一样产品,详细分析可转这里ui

 
工厂模式.PNG

 

  1. 抽象工厂模式( Abstract Factory )

应对产品族概念而生spa

与工厂模式相比,抽象工厂模式是为了应对产品族.net


 
抽象工厂模式.PNG
  1. 装饰者模式( Decorator )

动态的给一个对象添加一些额外的功能线程

ComponentImpl 和 Decorator 类都实现了 IComponent 接口,不一样的是 ComponentImpl 提供了具体实现,而 Decorator 是先聚合 ComponentImpl 接着在本身的实现方法即 operation() 方法中作些处理(即装饰)后再调用 ComponentImpl 对象的具体实现3d

 
装饰者模式.PNG

 

  1. 代理模式( Proxy )

封装被代理对象并限制外界对被代理对象的访问

注意区分装饰者模式和代理模式的区别。在代理模式中,ComponentImpl 和 Proxy 类都实现了 IComponent 接口,Proxy 对象中虽然也维护着一个 ComponentImpl 对象,但通常状况下它是代理类本身初始化的,不像装饰者模式是经过 set 进去的,同时在接口方法即 operation() 中代理对象会限制外界对被代理对象的访问,而装饰者模式是装饰者给被装饰者添加额外的行为,详细不一样点分析可转这里

 
代理模式.PNG

 

  1. 模板方法模式( Template )

定义一个操做的算法骨架, 并将一些步骤延迟到子类中

AbsTemplate 抽象类中定义了一系列的方法,其中外界惟一能调用的 operation() 方法是 final 的(即不可重写),在该方法中分别调用了 first()second()third() 方法(即搭好算法框架),子类经过继承抽象类重写不一样的方法来添加各自的行为

 
模板方法模式.PNG

 

  1. 外观模式( Facade )

为系统向外界提供一个统一的接口

Fracade 为 ComponentA 、ComponentB 、ComponentC 向外即 ClientA 、ClientB 提供统一的接口


 
外观模式.PNG
  1. 适配器模式( Adapter )

将一个类的接口转换成客户但愿的另外一个接口

好比项目引入第三方类库后应该先封装起来转换成本身须要的接口再使用,防止之后类库出现变动。AdapterA 先将 LibraryClass 封装起来,其对外提供的 operation() 方法中调用 LibraryClass 对象的方法,若之后换类库,只需改 AdapterA 类或者建立新的 Adapter 实现类便可

 
适配器模式.PNG

 

  1. 桥接模式( Bridge )

将抽象部分与实现部分分离,使它们均可以独立的变化

将本来要耦合的上下层抽象出来,上层和下层以组合的方式链接,而后上下层抽象可派生出许多不一样方向的子类。AbsShape 封装了 IDrawProgram 接口,这样它的子类想从 DPA 切换到 DPB 或者别的,只需 set 进去就行啦(你看,这 UML 图多像座桥)

 
桥接模式.PNG

注: 适配器、桥接与外观三模式之间关系

 

  1. 建造者模式( Builder )

将一个复杂对象的构建与它的表示分离.

做为 Product 的内部类,Builder 统一了 Product 的整个构建过程,同时在 build 过程当中,能够因为 set 值顺序不一样等缘由产生不一样的效果

 
建造者模式.PNG

 

  1. 观察者模式( Observer )

定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象,在它的状态发生变化时,会通知全部的观察者.

先将 Observer 注册到 Observable ,那么当 Observable 状态改变时会通知它持有的全部 Observer ,对了,最好 Observable 中的 mList 的泛型是 WeakReference<Observer> ,防止内存泄漏

 
观察者模式.PNG

 

  1. 单例模式( Singleton )

保证一个类仅有一个实例,并提供一个访问它的全局控制点.

下图是利用 Java 的语言特性实现的线程安全且能延迟初始化的单例模式,Singleton 中维护着静态私有的 SingleHolder 类, SingleHolder 类中持有个静态常量 sHolder ,Client 若经过 getSingleInstance 方法获取 Singleton 对象则直接返回 SingleHolder 类的 sHolder ,详细分析可转这里

 
单例模式.PNG
  1. 命令模式( Command )

将一个请求封装成为一个对象, 使能够用不一样的请求对客户进行参数化

Action 封装了具体行为,Command 封装了 Action 并提供空方法 execute() ,它的子类经过重写该方法可在方法里调用 mAction 不一样行为达到封装命令的目的,最后 Client 封装了一系列的 Command 对象,并能够经过 notify() 方法一个接着一个调用所持有 Command 对象们的 execute() 方法达到给 Action 传达命令的目的

 
命令模式.PNG
抄自连接:https://www.jianshu.com/p/bdf65e4afbb0