23种设计模式&6大设计原则

六大设计原则

在这里插入图片描述

  1. 单一职责原则 (Single Responsiblity Principle) :一个接口或类只有一个原因引起变化,也就是一个接口或类只有一个职责,它就负责一件事情,各司其职。
  2. 开闭原则(Open Closed Principle):类、模块、函数,可以去扩展,但不要去修改。如果要修改代码,尽量用继承或组合的方式来扩展类的功能,而不是直接修改类的代码。对实体的改动,最好用扩展而非修改的方式。
  3. 里式替换原则(Liskov Substitution Principle):只要父类出现的地方子类就可以出现,而且替换为子类也不会产生任何错误或异常,使用者可能根本就不需要知道父类还是子类。但是反过来就不行了,有子类出现的地方,父类未必就能适应。
  4. 迪米特法则(Law of Demeter):尽量减少对象之间的交互,从而减小类之间的耦合。一定要做到“低耦合、高内聚”。
  5. 接口隔离原则(Interface Segregation Principle):不要对外暴露没有实际意义的接口,尽量保证接口的实用性。当需要对外暴露接口时,需要再三斟酌,若没必要对外提供就不要定义,因为一旦提供了就意味着,将来要多做一件事情。
  6. 依赖倒置原则(Dependence Inversion Principle):高层模块不应该依赖于底层模块,而应该依赖于抽象。抽象不应依赖于细节,细节应依赖于抽象。应该面向接口编程,不该面向实现类编程。面向实现类编程相当于就事论事,那是正向依赖;面向接口编程,相当于透过现象看本质,抓住事务的共性,那就是反向依赖,即依赖倒置。

二十三种设计模式

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。

总体来说设计模式分为三大类:
创建型模式(5):

  1. 工厂方法模式(Factory Method):定义一个接口用于创建对象,但是让子类决定初始化哪个类。工厂方法把一个类的初始化下放到子类。
  2. 抽象工厂模式(abstractFactory):为一个产品族提供了统一的创建接口。当需要这个产品族的某一系列的时候,可以从抽象工厂中选出相应的系列创建一个具体的工厂类。
  3. 单例模式(Singleton):保证一个类只有一个实例,并提供一个访问它的全局访问点。
  4. 建造者模式(Builder):将一个复杂对象的构建与他的表示相分离,使得同样的构建过程可以创建不同的表示。
  5. 原型模式(Prototype):用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建新的对象。

结构型模式(7):

  1. 装饰器模式(Decorator):向某个对象动态地添加更多的功能。修饰模式是除类继承外另一种扩展功能的方法。
  2. 适配器模式(adapter pattern):将某个类的接口转换成客户端期望的另一个接口表示。适配器模式可以消除由于接口不匹配所造成的类兼容性问题。
  3. 代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。
  4. 外观模式(Facade):为子系统中的一组接口提供一个一致的界面, 外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
  5. 桥接模式(Bridge):将一个抽象与实现解耦,以便两者可以独立的变化。
  6. 组合模式(Composite):把多个对象组成树状结构来表示局部与整体,这样用户可以一样的对待单个对象和对象的组合。
  7. 享元模式(Flyweight):通过共享以便有效的支持大量小颗粒对象。

行为型模式(11):

  1. 策略模式(strategy):定义一个算法的系列,将其各个分装,并且使他们有交互性。策略模式使得算法在用户使用的时候能独立的改变。
  2. 模板方法模式(Template Method):模板方法模式准备一个抽象类,将部分逻辑以具体方法及具体构造子类的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。先构建一个顶级逻辑框架,而将逻辑的细节留给具体的子类去实现。
  3. 观察者模式(Observer):在对象间定义一个一对多的联系性,由此当一个对象改变了状态,所有其他相关的对象会被通知并且自动刷新。
  4. 迭代器模 式 (Iterator):提供一个方法顺序访问一个聚合对象的各个元素,而又不需要暴露该对象的内部表示。
  5. 责任链模式(Chain of Responsibility):为解除请求的发送者和接收者之间耦合,而使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。
  6. 命令模式(Command):将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,对请求排队和记录请求日志,以及支持可撤销的操作。
  7. 备忘录模式(Memento):备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捉住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。
  8. 状态模式(State):让一个对象在其内部状态改变的时候,其行为也随之改变。状态模式需要对每一个系统可能取得的状态创立一个状态类的子类。当系统的状态变化时,系统便改变所选的子类。
  9. 访问者模式(Visitor):封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改,接受这个操作的数据结构可以保持不变。访问者模式适用于数据结构相对未定的系统,它把数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由的演化。
  10. 中介者模式(Mediator):包装了一系列对象相互作用的方式,使得这些对象不必相互明显作用,从而使它们可以松散偶合。当某些对象之间的作用发生改变时,不会立即影响其他的一些对象之间的作用,保证这些作用可以彼此独立的变化。
  11. 解释器模式(Interpreter):给定一个语言,定义他的文法的一个表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

设计模式之间的关系如下图:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值