设计模式复习

About 5 mindesign patternpattern

一、指导思想

这几个指导思想主要的目标是让写的代码能更灵活的被其他服务调用、在扩展新功能的时候可以不用修改原来的代码、就算需要修改的时候也只需要修改极少的代码量、而且写的代码可以被重复使用。这样的代码才是好的代码。

名称解释描述
MainTainability可维护性修改代码的时候,改动的越小维护性就越高
Reusability可复用性代码可以被重复使用
Extensibility可扩展性添加新功能的时候不用修改原来的代码
Flexiblity灵活性代码接口可以被灵活调用

二、六大原则

为了实现上面的指导思想,于是就出现了六个开发的原则。不是每个原则都需要遵守而是要视情况而定。在何时的地方用合适的原则。

记忆方法: 李(里)姐(接)弟(迪)易(依)开单

简称名称描述
SRP单一职责原则类不能太大,不是自己负责的就不要处理
OCP开闭原则对扩展开放、对修改关闭。多抽象,多态是开闭原则的关键
LSP里氏替换子类完全可以替换父类。所有使用父类的地方都必须能透明的替换子类
DIP依赖倒置面向接口编程,依赖接口比依赖具体实现
ISP接口隔离原则接口尽量不要合二为一。将接口分为粒度更细的接口
LoD迪米特法则尽量不要和陌生人说话,减少其他类的耦合度

三、GOF设计模式

GoF通过实践总结了一些特定场景的设计模式。这些设计模式能很好的符合六大原则,灵活的运用这些设计模式能在开发代码的时候有不同的设计思路。这些设计模式一共有23种,一般把这些设计模式分为3类(创建型、结构型、行为型),创建型关注对象的创建过程,结构型关注对象的组成方式,行为型关注对象之间的通信

名称关注点例子
创建型对象的创建过程建造者、单例、工厂、抽象工厂、原型
结构型对象的组合过程外观、装饰、适配器、桥接、组合、享元、代理
行为型对象的通信策略、模版方法、中介者、备忘录、观察者、命令、责任链、解释器、迭代器、状态、访问者

四、具体

4.1 创建型

名称描述场景
单例系统中只存在一份spring的bean默认单例
工厂通过工厂生产不同的类,屏蔽创建过程spring的bean工厂
抽象工厂利用抽象工厂类创建工厂,创建过程交给过工厂类完成定义一系列的产品族
建造者需求变化的时候对象也跟着变化,通过不同的算法构建复杂的对象构建一个复杂对象
原型复制新类时(浅clone和深clone问题)java clone

4.2 结构型

名称描述场景
外观将多个类放在一个方法里面调用接口多、调用复杂、需要统一调用时
装饰选择不同的类可以组合出不同的功能动态的给类添加职责时
适配器类之间的适配过程,就行3孔插座转2孔插座两个类之间需要转换时
桥接将抽象和实现解耦,是他们可以独立变化系统多角度分类,每个角度都可能变化
组合自己的属性就是自己,利用递归进行解析树形结构数据展示
享元为了减少实例化的次数,利用共享对象的方式线程池的池化思想
代理添加一个中间层用一个类代替另一个的功能动/静代理,cjlib、jdk自动的动态代理

4.3 行为型

名称描述场景
策略一个类的行为在运行时根据不同的策略进行更改扩展其他策略不需要修改之前的代码。comparator
模版方法将一些通用的方法放在一起每次都需要执行很多相同代码时
中介者用星形接口改善调用的复杂度类与类之间耦合特别严重时。消息中间件
备忘录记录状态用于回滚,把内部状态记录在外部需要记录操作备忘时
观察者需要观察一个对象发生改变时做相应处理时mq、目标类发生改变通知所有观察者
命令通过数据驱动行为,不同的命令执行不同的操作有命令的地方
责任链多个对象处理同一个数据形成链条式结构日志、filter
解释器用于解释一种语言语法需要解释的场景
迭代器一个顺序访问容器元素的方法,一种多态的应用Iterator
状态内部状态的改变,其行为也跟着改变条件、分支语句的代替者
访问者执行的逻辑跟着访问者的改变而改变需要对类进行很多不相关的操作,需要避免操作污染这个类时

五、总结

设计模式是在特定场景的一些优秀的设计方式,灵活的使用这些设计模式,能在开发代码的时候有更多选择思路。很多的设计模式都是相通的,没必要在写代码的时候生硬的套用这些设计模式。可以在实际代码开发中使用多种方式实现自己的业务逻辑。

Last update:
Contributors: gaoqisen