面向对象的分析设计会根据一些原则进行设计,以下是一些常见的设计原则。
常见的面向对象设计原则
-
单一职责原则SRP(Single Responsibility Principle: 就是说一个类仅有一个引起它变化的原因。如果一个类有多个引起它变化的原因,那也就意味着这个类有多个职责,把多个职责耦合在一起了。
-
开放-关闭原则OCP(Open-Closed Principle):就是说一个类应该对扩展开放,对修改关闭,也称为开闭原则。要求类的行为是可以扩展的,而且是在不修改已有代码的情况下进行扩展,也不必改动已有的源代码或者二进制代码。
-
里氏替换原则LSP(Liskov Substitution Principle): 就是说子类型必须能够替换掉它们的父类型,这是一种多态的使用情况,它可以避免在多态的应用中,出现某些隐蔽的错误。
-
依赖倒置原则DIP(Dependence Inversion Principle): 就是说要依赖于抽象,不要依赖于具体类,要做到依赖倒置需要做到:1高层模块不应该依赖于底层模块,二者都应该依赖于抽象,2抽象不应该依赖于具体实现,具体实现应该依赖于抽象。
-
接口隔离原则ISP(Interface Segregation Principle): 就是说不应该强迫客户依赖于他们不用的方法。通常用来处理比较“庞大”的接口,即有较多操作声明的接口。分离接口的方式有代码分离,使用委托来分离接口,多重继承的方式进行分离。
-
最少知识原则LKP(Least Knowledge Principle): 就是说只和你的“朋友”说话,设计系统时应该尽量减少对象之间的交互,松散类的耦合。“朋友”有:当前对象本身;通过方法的参数传递进来的对象;当前对象所创建的对象;当前对象的实例变量所引用的对象;方法内所创建或实例化的对象
-
其他原则:如面向接口编程;优先使用组合而非继承;一个类需要的数据应该隐藏在类的内部;类之间应该零耦合或者只有传导耦合;在水平方向上尽可能统一地分布系统功能
根据Gang of Four四人的分类,23种设计模式可以分为三大类,分别为structural patterns, creational patterns 和 behavioral patterns,详细释义如下:
结构型(Structural):Structural patterns deal with the composition of classes or objects.
创建型(Creational):Creational patterns concern the process of object creation.
行为型(Behavioral):Behavioral patterns characterize the ways in which classes or objects interact and distribute responsibility.