php之设计模式

什么是设计模式?

       设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。

设计模式的优点:

  1).复用解决方案: 设计模式本身就是对某一类问题的通用解决方案,是更高级别的复用,已经超出了代码复用.

       2).确定通用术语:开发中的交流和协作都需要共同的词汇其础和对问题的共识. 当你有想表达却又表达不清楚的设计思路,即使表达出来也会被同事误解的时候,设计模式就显出沟通的优势了。

       3).代码更易于修改与维护。因为设计模式都是久经考验的解决方案,它们的结构都是经过长期的发展形成的,善于应对变化,设计模式本身也是对变化点的封装。

       4).模式有助于提高思考层次。学习模式后,就算不用模式中的方法,也会更好的采取更好的策略去解决问题。
 
PHP设计模式——六大原则:
  1.单一职责:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。
    优点:

      1)、可以降低类的复杂度,一个类只负责一项职责,逻辑简单;

                2)、提高类的可读性,提高系统的可维护性;

                3)、变更引起的风险降低,变更是必然的。

  2.里氏代换原则:所有引用基类的地方必须能透明地使用其子类的对象,也就是说子类可以扩展父类的功能,但不能改变父类原有的功能

  3.依赖倒置原则:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。

    优点:

      1)、低层模块尽量都要有抽象类或接口,或者两者都有。

      2)、变量的声明类型尽量是抽象类或接口。

      3)、使用继承时遵循里氏替换原则。

  4.接口隔离原则:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。

    注意:

      1)、接口尽量小,但是要有限度。对接口进行细化可以提高程序设计灵活性 是不挣的事实,但是如果过小,则会造成接口数量过多,使设计复杂化。所以一定要适度。

      2)、为依赖接口的类定制服务,只暴露给调用的类它需要的方法,它不需要的方法则隐藏起来。只有专注地为一个模块提供定制服务,才能建立最小的依赖关系。

      3)、提高内聚,减少对外交互。使接口用最少的方法去完成最多的事情。

  5.迪米特法则:一个对象应该对其他对象保持最少的了解。即类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。简单的理解就是高内聚,一个类尽量减少对其他对象的依赖,并且这个类的方法和属性能用私有的就尽量私有化。

    注意:

      1)、只与直接的朋友通信,不要和陌生人说话。
      2)、过分的使用该原则,将导致系统复杂度变大。所以在采用迪米特法则时要反复权衡,既做到结构清晰,又要高内聚低耦合。

  6.开闭原则:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。开闭原则是判断面向对象设计是否正确的最基本的原理之一。遵循开闭原则的系统设计,可以让软件系统可复用,并且易于维护。

    根据开闭原则,在设计一个软件系统模块(类,方法)的时候,应该可以在不修改原有的模块(修改关闭)的基础上,能扩展其功能(扩展开放)。

      - 扩展开放:某模块的功能是可扩展的,则该模块是扩展开放的。软件系统的功能上的可扩展性要求模块是扩展开放的。

      - 修改关闭:某模块被其他模块调用,如果该模块的源代码不允许修改,则该模块修改关闭的。软件系统的功能上的稳定性,持续性要求是修改关闭的。

    这也是系统设计需要遵循开闭原则的原因:

      1)稳定性。开闭原则要求扩展功能不修改原来的代码,这可以让软件系统在变化中保持稳定。

      2)扩展性。开闭原则要求对扩展开放,通过扩展提供新的或改变原有的功能,让软件系统具有灵活的可扩展性。

  面向对象设计模式分为三类:创建型、结构型、行为型三种。

    创建型:创建对象时,不再由我们直接实例化对象;而是根据特定场景,由程序来确定创建对象的方式,从而保证更大的性能、更好的架构优势。

      简单工厂模式:工厂方法模式:抽象工厂模式:单例模式:建造者模式(生成器模式):原型模式:

    结构型:用于帮助将多个对象组织成更大的结构。

      适配器模式:桥接模式:组合器模式:装饰器模式:门面模式:亨元模式:代理模式:

    行为型:用于帮助系统间各对象的通信,以及如何控制复杂系统中流程。

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

    

posted @ 2017-07-27 13:51  CandyChen  阅读(103)  评论(0)    收藏  举报