关闭

老僧长谈设计模式-0-六大原则

294人阅读 评论(0) 收藏 举报
分类:

声明:内容多来自网络,经整理而成。

在这里我们将认识到:

  • 单例模式
  • 工厂模式
  • 策略模式
  • 观察者模式
  • 装饰者模式
  • 适配器与外观模式
  • 状态模式
  • 代理模式
  • 门面模式
  • 桥梁模式
  • 责任链模式
  • 复合模式


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)也是类与类之间的连接,依赖是单向的。依赖关系表示不是对象的固有属性,通常为参数传入




【结束】

放张图片把,和题目呼应一下


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:213593次
    • 积分:2796
    • 等级:
    • 排名:第12828名
    • 原创:31篇
    • 转载:181篇
    • 译文:0篇
    • 评论:40条
    文章分类
    最新评论