设计原则
1.开闭原则:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,使用接口和抽象类对程序进行扩展。软件中易变的细节可以从抽象派生来的实现类来进行扩展。
一句话总结就是使用接口和抽象类编程。
2.里氏代换原则:子类可以扩展父类的功能,但不能改变父类原有的功能。换句话说,子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法。如果通过重写父类的方法来完成新的功能,这样写起来虽然简单,但是整个继承体系的可复用性会比较差,特别是运用多态比较频繁时,程序运行出错的概率会非常大。父类类型指向子类对象。子类可以扩展父类的功能,但不能改变父类原有的功能。
1)子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
2)子类可以增加自己独有的方法。
3)当子类重载父类的方法时,子类方法的输入参数要比父类方法的输入参数更宽松。
4)当子类实现父类的方法时,子类方法的返回值要比父类更严格或者相等。比如抛出异常时,子类要抛出更具体的异常。
一句话总结就是子类继承父类不要重写父类的方法。
3.依赖倒转原则:高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。
1)每个类尽量提供接口或抽象类,或者两者都具备。
2)变量的声明类型尽量是接口或者是抽象类。
3)任何类都不应该从具体类派生。
4)使用继承时尽量遵循里氏替换原则
一句话总结就是要面向接口编程,不要面向实现编程。
4.接口隔离原则:客户端不应该被迫依赖于它不使用的方法;一个类对另一个类的依赖应该建立在最小的接口上。通俗说就是一个接口只写一个子模块或者业务逻辑的方法,当实现类需要实现多个方法的时候,采用实现多个接口的方式。
一句话总结就是接口里面的方法要同一个业务逻辑,放入方法个数尽可能少,必要时采用实现多个接口的方法。
5.迪米特法则:迪米特法则又叫最少知识原则。只和你的直接朋友交谈,不跟“陌生人”说话。其含义是:如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。迪米特法则中的“朋友”是指:当前对象本身、当前对象的成员对象、当前对象所创建的对象、当前对象的方法参数等,这些对象同当前对象存在关联、聚合或组合关系,可以直接访问这些对象的方法。
一句话就是使用中介类进行交互。
6.合成复用原则:尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。通常类的复用分为继承复用和合成复用两种。
7.单一职责原则:一个类只负责一种职责。
8.记忆口诀:访问加限制,函数要节俭,依赖不允许,动态加接口,父类要抽象,扩展不更改。