天天看点

设计模式概述和面向对象设计的原则

模式是对特定问题的解决方案,设计模式是前人通过开发经验对特定代码设计,代码编写等总结出来的一套解决特定问题的方案,来提高代码的可维护性、可重用性、可理解性、可靠性等。

设计模式的优点:

    1.是前人经验的总结,可以降低开发人员理解系统的复杂度

    2.可以方便地复用成功的设计和体系结构

    3.使设计方案更加灵活,且易于修改

    4.提高软件的开发效率和软件质量,提高设计水平

    5.有助于更加深入地理解面向对象思想

创建型模式:

    将对象的创建和对象的使用分离,使用对象时无需知道对象创建的细节,使设计更加符合单一职责原则,降低了系统的耦合性,且易于扩展,包括简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式和单例模式。

    为了使系统更加符合开闭原则和依赖倒转原则,需要做到"将抽象写到代码中,将具体写配置里",通过修改无须编译的配置文件来提高系统的可扩展性和灵活性。

结构型模式:

    主要用于处理类或对象的组合,包括适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式和代理模式。

行为性模式:

    主要用于描述对类或对象怎样交互和怎样分配职责,包括职责链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。

面向对象设计的原则:

    1.单一职责原则:类的职责要单一,不能将较多的职责放在同一个类中,是高内聚低耦合的指导方针。

    2.开闭原则:软件实体对扩展开放,对修改关闭。是面向对象设计可复用的基石,其关键是抽象化。里氏代换原则、依赖倒转原则等都是开闭原则的实现方法。

    3.里氏代换原则:能够使用基类的地方都可以用子类替代。在程序中尽量使用基类类型来定义对象,然后在运行时再确定子类类型,使用子类对象来替代基类对象。里氏代换原则要求子类必须全部覆盖父类的方法且不能有新的方法。

    4.依赖倒转原则:面向抽象(接口)编程,而不是面向具体(实现)编程。抽象不应该依赖于细节,细节应该依赖于抽象。和里氏代换一样,具体实现类应该覆盖抽象(接口)类中的所有方法且不能有新方法,否则将无法调用到具体实现类中的新方法。里氏代换原则是依赖倒转原则的基础。

        依赖注入:将一个类的对象传入到另一个类中,注入时应尽量注入其父类对象,然后在程序运行时用子类对象替换父类对象。依赖注入又分为构造注入(构造函数注入)、设值注入(setter方法注入)和接口注入(接口方法注入)。

    5.接口隔离原则:用多个专门的接口来替代一个统一的接口。

    6.合成复用原则:尽量使用聚合/组合,而少使用继承,降低系统的耦合度。实现复用有两种机制:聚合/组合和继承。继承复用会破坏系统的封装性,因为继承会将父类的实现细节暴露给子类。聚合/组合将一个类的对象作为另一个类的一部分来实现复用,这样复用类的具体实现细节对新对象是不可见的,相对继承而言,耦合度较低,也更加灵活。

    7.迪米特法则:实体(类)之间应尽可能少的相互作用,降低系统的耦合度。如果两个类之间不必发生直接通信或消息传递,那么这两个类就不应直接相互作用,如果需要调用另一个类的方法,可以通过第三者转发这个调用。

继续阅读