设计模式期末复习总结-1
七个软件 设计原则
装饰模式体现了单一职责
里氏代换:
子类能够替换父类
装饰模式体现了合成复用
每个软件单位对其它只有最少的知识,桥接模式为典型,还有外观模式
设计模式定义:
是一套被反复使用,多数人知晓,经过分类编目的代码设计经验的总结
设计模式的目的:
为了可复用代码
提供代码可靠性
让代码更容易被他人理解
二十三种设计模式
5种创建型模式 工厂方法(含 简单工厂) 抽象工厂 建造者模式 原型模式 单例模式
7种结构型模式 适配器 桥接 组合 装饰 外观 享元 代理
11 种行为型模式
======创建型=======
简单工厂模式 :可以根据参数的不同返回不同类的实例,专门定义一个类来负责创建其它类的示例,被创建的类通常有共同的父类
当需要什么,只需要传入一个正确的参数,就可获取所需要的对象,而无需知道其细节
实例:简单电视工厂,权限管理
工厂方法模式:工厂父类负责创建公共接口,工厂子类负责生成具体产品对象,目的是 将产品类的实例化操作延迟到工厂子类种完成
实例:电视机工厂
抽象工厂模式:提供一个创建一系列相关或相互依赖的接口,无须指定具体的类
实例:电器工厂
建造者模式Builder:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
无需关心对象具体组装过程,只需确定具体建造者的类型
实例:KFC套餐
原型模式Prototype:用原型实例指定创建对象的种类,并通过复制这些原型创建新的对象。
实例:邮件复制
单例模式Singleton:确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例
实例:身份证号码
======结构型=======
适配器模式Adapter:将一个接口转换成用户希望的另一个接口,使接口不兼容的类可以一起工作
实例:仿生机器人
桥接模式:将抽象部分与它的实现部分分离,使他们都可以独立的变化
实例:模拟毛笔
组合模式Composite:组合多个对象形成树形结构,以表示“部分-整体”的结构层次,对单个对象和组合对象的使用有一致性
实例:水果盘
装饰模式Decorator:动态的给一个对象增加一下额外的职责
实例:变形金刚
外观模式Facade:外部与子系统的通信通过一个统一的外观对象进行,为子系统的一组接口提供一个统一的接口
实例:电源总开关
享元模式Flyweight:运用共享技术有效的支持大量细粒度对象的复用
实例:共享网络设备
代理模式Proxy:给一个对象提供一个代理,并由代理对象控制对原对象的引用
实例:论坛权限控制代理
=======行为型==========
职责链模式Handler:避免请求发送者与接收者耦合,让多个对象都有可能接到请求,将请求对象连城一条链,并且沿着这条链传递请求
实例:审批假条
命令模式Command:将一个请求封装成一个对象,使得不同的请求可以对客户进行参数化,对请求排队或记录日志,支持可撤销的操作
实例:电视遥控器
中介者模式Mediator:用一个中介对象封装一系列的对象交互,使其耦合松散
实例:虚拟聊天室
备忘录模式Memento:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,可以将对象恢复到原来的状态
实例:用户信息操作撤销
观察者模式Observer:定义对象间的一种一对多依赖关系,使得一个对象发生变化时,相关依赖皆得到通知并被自动更新
实例:猫狗与老鼠
状态模式State:允许一个对象在其内部状态改变之时改变它的行为,对象看起来似乎修改了他们的类
实例:论坛用户等级
策略模式Strategy:定义一系列算法,将每一个算法封装起来,并让他们可以相互替换
实例:排序策略
迭代器模式Iterator:提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示
实例:电视遥控器 对频道进行遍历
模板方法模式Template:定义一个操作种的算法的框架,而将一些步骤延迟到子类中,可以不改变一个算法的结构即可重定义带算法的某个特定步骤。
实例:银行业务办理流程
优点:
符合开闭原则,符合单一职责原则
降低了系统的耦合度
减少子类个数
节约资源,提高系统性能
提高了系统的可扩展性,可复用性
隐藏了不必要的具体细节
缺点:
一定程度上违反了开闭原则
系统耦合度高
增加类的个数,产生更多对象
提升了系统的复杂度
提升了系统的理解与设计难度,提升了系统的抽象性