设计模式简介

一、设计模式的概念

      设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。主要包含六大设计模式和23种设计模式。

二、设计模式原则

       设计模式的原则不仅仅在使用到23中设计模式中才采用,可以在定义类,接口,抽象类,类与类的继承,接口的实现等编码时,遵守这规则,对代码复用性,代码修改、都有很好的帮助。也就是良好的编码习惯。

1、单一职责原则:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。

2、里氏替换原则(Liskov Substitution Principle):如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子类型。也即里氏替换原则中说,任何基类可以出现的地方,子类一定可以出现。LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。

3、依赖倒置原则(Dependence Inversion Principle):高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。依赖倒置原则的中心思想是面向接口编程

4、接口隔离原则(Interface Segregation Principle):客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。接口隔离原则的含义是:建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少。

5、迪米特法则(Law Of Demeter):一个对象应该对其他对象保持最少的了解。自从我们接触编程开始,就知道了软件编程的总的原则:低耦合,高内聚。无论是面向过程编程还是面向对象编程,只有使各个模块之间的耦合尽量的低,才能提高代码的复用率。

6、开闭原则(Open Close Principle):一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。

三、设计模式的类型

 

1、创建型模型

特点:这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。

包含:

工厂模式(Factory Pattern):们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
抽象工厂模式(Abstract Factory Pattern):在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。
单例模式(Singleton Pattern):涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建
建造者模式(Builder Pattern):使用多个简单的对象一步一步构建成一个复杂的对象。
原型模式(Prototype Pattern):是用于创建重复的对象,同时又能保证性能,实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。

2、行为型模式

特点:这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。

包含:

适配器模式(Adapter Pattern):是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。
桥接模式(Bridge Pattern):把抽象化与实现化解耦,使得二者可以独立变化。它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。
过滤器模式(Filter、Criteria Pattern):这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。它结合多个标准来获得单一标准。
组合模式(Composite Pattern):又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。
装饰器模式(Decorator Pattern):允许向一个现有的对象添加新的功能,同时又不改变其结构。它是作为现有的类的一个包装。
外观模式(Facade Pattern):隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,来隐藏系统的复杂性。
享元模式(Flyweight Pattern):主要用于减少创建对象的数量,以减少内存占用和提高性能,它提供了减少对象数量从而改善应用所需的对象结构的方式。
代理模式(Proxy Pattern):一个类代表另一个类的功能,,我们创建具有现有对象的对象,以便向外界提供功能接口,

3、结构型模式

特点:这些设计模式特别关注对象之间的通信

包含:

责任链模式(Chain of Responsibility Pattern):为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。主要解决:职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了。
命令模式(Command Pattern):是一种数据驱动的设计模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。
解释器模式(Interpreter Pattern):这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。
迭代器模式(Iterator Pattern):这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。
中介者模式(Mediator Pattern):是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。
备忘录模式(Memento Pattern):保存一个对象的某个状态,以便在适当的时候恢复对象。
观察者模式(Observer Pattern):当一个对象被修改时,则会自动通知它的依赖对象。
状态模式(State Pattern):类的行为是基于它的状态改变的。在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。
策略模式(Strategy Pattern):一个类的行为或其算法可以在运行时更改。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。
访问者模式(Visitor Pattern):我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值