PHP23种设计模式之序言

作者: 温新

分类: 【设计模式】

阅读: 4160

时间: 2019-12-17 15:43:18

一、什么是设计模式

百度百科:设计模式(Designpattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。

目的:使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。

设计模式简述:每一个模式对应着不同的应用场景,解决不同的问题。设计模式有诸多好处(如“目的”所说),但不能乱用设计模式,

每一个设计模式都有其优缺点,如果乱用设计模式而忽略它的缺点,用的不好,那么就是灾难,最好的办法就是根据环境来使用正确的设计模式。拿单例模式来说,如明不使用设计模式的话,那么每new一次,就会实例出一个对象来,这就会增加内存的开销,当达到一定的量时,那结果就是恐怖的。使用单例模式,无论new多少个实例对象,其结果都只有一个实例对象。

二、设置模式类型

一说设计模式,首先会说23种设计模式,设计模式远不止23种。通常将设计模式分为创建型模式(CreationalPatterns)、结构型模式(StructuralPatterns)、行为型模式(BehavioralPatterns)三大类。

创建型模式(5个):对象实例化的模式,创建型模式用于解耦对象的实例化过程。

单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式

结构型模式(7个):把类或对象结合在一起形成一个更大的结构。

适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式、代理模式

行为型模式(11个):类和对象如何交互,及划分责任和算法。

访问者模式、模板模式、策略模式、状态模式、观察者模式、备忘录模式、中介者模式、迭代器模式、解释器模式、命令模式、责任链模式

三、设计模式七大原则

高内聚、低耦合、多复用

1)单一职责原则(SingleResponsibilityPrinciple)

含义:一个类只负责一项职责。解释:一个类如果负责两个不同的职责,当其一个一个职责发生变更而改变类时,可能会造成另外一个职责执行错误,因此需要将两个职责分开。

目的:降低代码复杂度、系统解耦合、提高代码可读性。

2)开闭原则(OpenClosePrinciple)

含义:对扩展开放,对修改封闭。简而言之,当需求发生变更时,不去修改代码,而是在此基础上进行扩展。

目的:提高扩展性、便于维护。

3)里氏代换原则(LiskovSubstitutionPrinciple)

含义:里氏代换原则是面向对象设计的基本原则之一。里氏代换原则中说,一个可以接受基类对象的地方必然可以接受一个子类对象。如:程序设计中尽量把父类设计为抽象类或者接口,让子类继承父类或实现父接口,子类可以扩展父类的功能,但不能改变父类原有的功能。

解释:父类能做的事,子类都能做;子类能做的事,父类不一定能做。

目的:避免系统继承体系被破坏

4)依赖倒转原则(DependenceInversionPrinciple)

含义:要针对抽象层编程,而不要针对具体类编程。

4.1)高层模块不应该依赖低层模块,二者都应该依赖其抽象

4.2)抽象不应该依赖细节,细节应该依赖抽象

4.3)依赖倒转(倒置)的中心思想是面向接口编程

4.4)依赖倒转原则是基于这样的设计理念:相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建的架构比以细节为基础的架构要稳定的多。在java中,抽象指的是接口或抽象类,细节就是具体的实现类。

4.5)使用接口或抽象类的目的是制定好规范,而不涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成。

目的:避免需求变化导致过多的维护工作

5)接口隔离原则(InterfaceSegregationPrinciple)

含义:使用多个专门的接口来取代一个统一的接口。

目的:避免接口过于臃肿

6)迪米特法则(DemeterPrinciple)

含义:一个软件实体对其他实体的引用越少越好,或者说如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用,而是通过引入一个第三者发生间接交互。

目的:降低类与类之间的耦合

7)合成复用原则(CompositeReusePrinciple)

含义:当要扩展类的功能时,优先考虑使用合成/聚合,而不是继承。

目的:防止类的体系庞大

关于自如初个人博客设计模式的说明:

1)关于设计模式这一块内容的文章,皆是根据书籍、网络资料学习而来,然后根据自己的理解所写;

2)关于设计模式理论知识,由于未能想出更好的案例和对一些模式的理解不够深入,有的理论知识则来自其他博客,如“序言”中的理论知识,大都来自于网络;

3)关于设计模式,是个人在学习中所写而记录,主要用于日后的温故;

4)若所有不足,还望指出,欢迎一起交流学习;

5)随着学习的深入与理解,后续将会对本块内容进行重新修正与编写记录。

我是夕阳何处寻,期待和优秀的你一起同行!

夕阳何处寻

2019年12月17日

请登录后再评论