此处设计模式的学习是用的是大话设计模式这本书。作者程杰。
其博客 :https://www.cnblogs.com/cj723/
第零章 UML类图
例如:
箭头的作用
第一章 简单工厂模式
- 优质代码的标准 : 并非无错
- 封装继承多态:耦合度降低 代码复用 易于修改
工厂模式
如图,工厂类负责写一个判断输入的字符的逻辑,负责返回一个运算类。获得运算类直接在客户端使用
- 优点&缺点
加减乘除四个运算逻辑分离,如果还需要加上乘方类,只需要添加类(继承运算类),然后在工厂类写上解析输入串逻辑,最后达到用户端和运算类的解耦。然后简单工厂模式没有完成扩展-封闭原则,做到这点需要方法工厂模式。
第二章 策略模式
策略模式:定义算法家族,分别分装,然后在根据需要来使用。
- 优点&缺点
- 使用策略模式,使得各类别算法更容易进行单元测试
- 把策略模式与工厂模式结构,让客客户端不需要在使用工厂类和算法类,只需要使用工厂策略类,耦合度更低。
第三章 单一职责原则
- 单一职责原则
一个雷而言,只有一个引起他变化的原因。即俄罗斯方块,分来游戏逻辑,页面逻辑。例如SpringBoot,分controller、dao、service层
第四章 开放-封闭原则
- 定义:软件实体(类,模块,函数)等可以扩展,但是不能修改。
例如,我们在简单工厂模式中的工厂增加乘方类,那么我就要修改工厂类的解析程序,这是违反这个原则,如果,我们做到只需要加上乘方类,其他代码不改变,还是可以得到正确结果的话,这就开发封闭原则。这也说明这个代码易于维护。
第五章 依赖倒转原则
- 定义
- 高层的模块不应该依赖底层的模块。这两个模块已改依赖接口
- 抽象不该依赖细节,细节已改依赖抽象
例如,我们电脑组装时,我们cpu,内存都可以买不同品牌,说明这些硬件面对接口编程,他们不相互依赖,依赖的是接口。在例如,写网站是,你写了调用数据库的函数,而你的高层调用这个函数。但是突然你要换数据库了,那么你的高层就要被重写了。如果你的高层是通过接口调用的,那么,只需要实现接口捷星,不需要重写接口
第六章 装饰模式
- 定义 动态地给一个对象添加一些额外的职责,对于增加功能职责,装饰模式比生成子类更加合适
装饰者UML图
看不懂的话看一下书的代码。
简单解释是,祖父类是有一个处理函数,子类都会用一个祖父类的引用,每个子类的祖父类引用可以套上其他子类,然后在处理函数调用这个引用的处理函数,就能一直堆砌这个处理函数。
ConcreteComponent 类用来在客户端二代增加职责。
第七章 代理模式
- 应用
- 隐藏地址空间
2.对于开销很大的对象,通过他来存放。比如浏览器看图片 - 安全代理,权限控制
4.只能指引,指当调用真实对象,代理处理另外一些事
第八章 工厂方法模式
例子:
- 优缺点
比起简单工厂模式,遵守的开放等比原则,但是对于使用某个工厂的逻辑,需要写在客户端,不过这可以通过反射机制来实现(反射机制在第十五章节)
第九章 原型模式
定义:通过原型实例来指定创建对象的种类,并且通过拷贝这些原型来创建新的对象。
-
结构图:
总结
这个模式主要应对的是深拷贝与浅拷贝的问的,对于需要拷贝功能的类,我们靠椅抽象出一个clone的接口。
第十章 模板方法模式
- 定义:定义一个操作中的算法骨架,且将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构计科重定义该算法的某些的步骤。
自己注解:我们把一个具有相同的内容的方法按顺序分离出来,对需要特定化的方法标定虚函数,这样的话,子类重写虚函数在搭配上相同的方法就能实现目的,这就符合了开放封闭原则、依赖依赖翻转原则。
结构图:
- 优点:
- 模板方法模式是把不冰的行为编译到超类,去除子类中的重复代码
- 模板方法模式提供了代码复用的的平台
- 将可变方法与不可变方法分离出来,帮助子类摆脱其纠缠。