声明:内容多来自网络,经整理而成。
在这里我们将认识到:
- 单例模式
- 工厂模式
- 策略模式
- 观察者模式
- 装饰者模式
- 适配器与外观模式
- 状态模式
- 代理模式
- 门面模式
- 桥梁模式
- 责任链模式
- 复合模式
1. 单一职责原则(Single Responsibility Principle,简称SRP)
不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。
2.开放--封闭原则(The Open-Closed Principle,简称OCP)
是说软件实体(类、模块、函数等等)应该可以扩展,但是不可以修改。即对于扩展是开放的,对于更改是封闭的。
Software entities should be open for extension,but closed for modification
3.依赖倒转原则(Dependence Inversion Principle )
A.高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。
B.抽象不应该依赖于具体,具体应该依赖于抽象。
说白了就是要针对接口编程,不要对实现编程。
4.里氏代换原则(Liskov Substitution Principle,简称LSP)
任何基类可以出现的地方,子类一定可以出现。
一个软件实体如果使用得是一个基类,那么一定适用于其子类。
美猴王的智慧
5.迪米特法则(Law of Demeter)
迪米特法则(Law of Demeter)又叫作最少知道原则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。
英文简写为: LoD.
广义的迪米特法则在类的设计上的体现:
优先考虑将一个类设置成不变类。
尽量降低一个类的访问权限。
谨慎使用Serializable。
尽量降低成员的访问权限。
6.接口隔离原则(ISP)
客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。
使用多个专门的接口比使用单一的总接口要好。
一个类对另外一个类的依赖性应当是建立在最小的接口上的。
一个接口代表一个角色,不应当将不同的角色都交给一个接口。没有关系的接口合并在一起,形成一个臃肿的大接口,这是对角色和接口的污染。
7.合成/聚合复用原则(Composition/Aggregation Principle],简称CARP)
合成聚合复用原则,尽量使用合成/聚合,尽量不使用类继承。合成聚合是“has a”的关系,而继承是“is a”的关系。由于继承是一中强耦合的结构,父类变,子类必变。
所以不是“is a”关系,我们一般不要用继承。优先使用合成聚合复用原则,有助于保持每个类的封装,降低继承的层次。
合成/聚合复用原则就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;
它的设计原则是:要尽量使用合成/聚合,尽量不要使用继承。
继承相比接口的缺点有:
①继承的代码在在多个子类中会重复。
②运行时的行为不容易改变。
继承的最大优点是
代码的复用
聚合表示整体和部分的关系,表示“拥有”。如奔驰S360汽车,对奔驰S360引擎、奔驰S360轮胎的关系是聚合关系,离开了奔驰S360汽车,引擎、轮胎就失去了存在的意义。在设计中, 聚合不应该频繁出现,这样会增大设计的耦合度。
合成则是一种更强的“拥有”,部分和整体的生命周期一样。合成的新的对象完全支配其组成部分,包括它们的创建和湮灭等。一个合成关系的成分对象是不能与另一个合成关系共享的。如:人 对 四肢、躯干、头的关系
举例:
不符合CARP的设计
符合CARP的设计
【类图基础知识】
①一般关系
一般化关系(Generalization),表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。
②关联关系
是类与类之间的联接,一个类作为另一个类的属性关系。
③聚合关系
聚合(Aggregation)关系是关联关系的一种,是强的关联关系;整体与个体之间的关系。
关联与聚合仅仅从Java语法上是分辨不出的,需要考察所涉及的类之间的逻辑关系。
④合成关系
合成(Composition)是关联关系的一种,是比聚合关系强的关系。合成关系是不能分享的。
⑤依赖关系
依赖(Dependency)也是类与类之间的连接,依赖是单向的。依赖关系表示不是对象的固有属性,通常为参数传入
【结束】
放张图片把,和题目呼应一下