设计模式(全)

为什么使用设计模式?##

  1. 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。
  2. 使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性
  3. 设计模式使代码编制真正工程化,每种模式都描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案
  4. 设计模式从大型软件架构出发,便与升级和维护的软件设计思想,强调降低依赖,降低耦合。

设计模式六大原则

  1. 开闭原则:对扩展开放,对修改关闭。对程序进行扩展是不应修改原有的代码。所以尽量使用接口和抽象类。
  2. 里氏替换原则:派生类替换掉基类,且软件单位的功能不受任何影响,实现基类的真正复用。
  3. 依赖倒转原则:针对接口编程,依赖于抽象而不依赖于具体
  4. 接口隔离原则:降低类之间的耦合度,使用多个隔离的接口,而非使用单一接口。
  5. 最少知道原则(迪米特发法则):一个实体应当尽量少的与其他实体发生相互作用,使得系统功能模块相对独立。
  6. 合成复用原则:尽量使用合成/聚合的方式,而非继承。

常用设计模式

一共有25种,可分为三类:创建型、结构型、行为型。

  • 创建型:创建对象的时候隐藏创建逻辑,不是使用new关键字直接实例化对象。
  • 结构型:关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能。
  • 行为型:关注对象之间的通信

创建型5种

  1. 工厂模式 Factory Pattern:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类
  2. 抽象工厂模式 Abstract Factory Pattern:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类
  3. 单例模式 Singleton Pattern:保证一个类仅有一个实例,并提供一个访问它的全局访问点
  4. 建造者模式 Builder Pattern:使用多个简单的对象一步一步构建成一个复杂的对象
  5. 原型模式 Prototype Pattern:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象

结构型8种

  1. 适配器模式 Adapter Pattern:使得原本由于接口不兼容而不能一起工作的那些类可以一起工作
  2. 装饰器模式 Decorator Pattern:向一个现有的对象添加新的功能,同时又不改变其结构
  3. 过滤器模式 Filter Pattern:使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来
  4. 桥接模式 Bridge Pattern:将抽象部分与实现部分分离,使它们都可以独立的变化
  5. 享元模式 Flyweight Pattern:尝试重用现有的同类对象,以减少创建对象的数量,从而减少内存占用和提高性能
  6. 代理模式 Proxy Pattern:为其他对象提供一种代理以控制对这个对象的访问。一张支票或银行存单是账户中资金的代理。支票在市场交易中用来代替现金,并提供对签发人账号上资金的控制
  7. 组合模式 Composite Pattern:将对象组合成树形结构以表示"部分-整体"的层次结构,使得用户对单个对象和组合对象的使用具有一致性
  8. 外观模式 Facade Pattern:向现有的系统添加一个接口,来隐藏系统的复杂性。去医院看病,可能要去挂号、门诊、划价、取药,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理,就很方便

行为模式12种

  1. 观察者模式 Observer
    Pattern:定义对象间的一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新
  2. 中介者模式 Mediator Pattern:提供一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中国加入
    WTO 之前是各个国家相互贸易,结构复杂,现在是各个国家通过 WTO 来互相贸易
  3. 访问者模式 Visitor Pattern:使用一个访问者类,它改变了元素类的执行算法,元素的执行算法可以随着访问者改变而改变
  4. 迭代器模式 Iterator Pattern:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示
  5. 解释器模式 Interpreter Pattern:对于一些固定文法构建一个解释句子的解释器。如:编译器、运算表达式计算。
  6. 备忘录模式 Memento
    Pattern:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便在适当的时候恢复对象。
  7. 空对象模式 Null Object Pattern:空对象可以在数据不可用的时候提供默认的行为。
  8. 责任链模式 Chain of Responsibility
    Pattern:将请求的发送者和接收者解耦,将接收者对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。
    如:红楼梦中的"击鼓传花";JS 中的事件冒泡
  9. 命令模式 Command
    Pattern:请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令
  10. 策略模式 Strategy Pattern:定义一系列的算法,把它们一个个封装起来,
    并且使它们可相互替换,实现同一个目的有多种方法。如:支付,吃饭。
  11. 模板模式 Template
    Pattern:一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。父类定义流程,子类实现流程细节。用于解决:业务有多种,但流程一致。如ipone生产地有多个国家,但都是同一个生产流程。
  12. 状态模式 State Pattern:对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值