1.学习目标
1.了解GOF23种设计模式和设计原则,做整体认知。
2.了解各设计模式之间的关联,解决设计模式混淆的问题。
3.了解spring中设计模式的应用
2.内容定位
1.设计模式在于理解,不只在于形式。
2.不要为了套用设计模式而使用设计模式,而是在业务遇到问题时,很自然的想到设计模式可以作为一种解决方案
3.GOF 23种设计模式简介
3.1设计模式归类
分类 | 设计模式 —|— 创建型 | 工厂方法模式(Factroy Method) 、抽象工厂模式(Abstract Factory)、建造者模式(Builder)、原型模式(Prototype)、单例模式(Singleton) 结构型 | 适配器模式(Adapter)、桥接模式(Bridge)、组合模式(Composite)、装饰器模式(Decorator)、门面模式(Facade)、享元模式(Flyweight)、代理模式(proxy) 行为型 | 解释器模式(Interpreter)、模板方法模式(Template Method)、责任链模式(Chain of Responsibility)、命令模式(Command)、迭代器模式(Iterator)、调节者模式(Mediator)、备忘录模式(Memento)、观察者模式(Observer)、状态模式(State)、策略模式(Strategy)、访问者模式(Visitor)
3.3设计模式之间的关系
4.容易混淆的设计模式
4.1单例模式和工厂模式
工厂类一般都是被设计为单例。
4.2策略模式和工厂模式
1.工厂模式包含工厂方法模式和抽象工厂,属于创建型模式,而策略模式属于行为型模式。
2.工厂模式主要是封装好创建逻辑,策略模式接收工厂创建好的对象,从而实现不同的行为。
3.创建:new 行为:invoke
4.3策略模式和委派模式
1.策略模式是委派模式内部的一种实现形式,策略模式关注的是结果能否相互替代。 ==例如:AliPay,WechatPay 就可以相互替代,为策略模式==
2.委派模式更关注分法和调度的过程。有可能采用if…else条件分支语句来分法,内部也可以使用策略模式。
4.4模板方法模式和策略模式
1.模板方法模式和策略模式都有封装算法
2.策略模式是使不同的算法可以相互替换,且不影响客户端应用层的使用。
3.模板方法是针对定义一个算法的流程,将一些有细微差异的部分交给子类实现。==策略模式算法实现是封闭的==
4.模板模式不能改变算法流程,策略模式可以改变算法流程且可替换,策略模式通常用来替换if…else..等条件分支语句
4.5装饰者模式和静态代理模式
1.装饰者模式关注点在于给对象动态添加方法,而代理更加注重控制对对象的访问。
2.代理模式通常会在代理类中创建被代理对象的实例,而装饰者模式通常把被装饰者作为构造参数。
4.6装饰者模式和适配器模式
1.装饰者模式和适配器模式都是属于包装器模式(Wrapper)。
2.装饰者模式可以实现被装饰者与相同的接口或者继承被装饰者作为他的子类,而适配器和被适配者可以实现不同的接口。
4.7适配器模式和静态代理模式
1.适配器可以结合静态代理来实现,保存被适配对象的引用,但不是唯一的实现方式。
4.8适配器模式和策略模式
在适配业务复杂的情况下,可以利用策略模式优化动态适配逻辑