软件设计模式笔记

  软件设计模式笔记

1. 面向对象五大原则

A.开放封闭原则,它是面向对象所有原则的核心,软件设计说到底追求的目标就是封装变化、降低耦合,而开放封闭原则就是这一目标的最直接体现。 开放封闭原则,其核心思想是:软件实体应该是可扩展的,而不可修改的。也就是,对扩展开放,对修改封闭的。

B. 单一职责原则,其核心思想为:一个类,最好只做一件事,只有一个引起它的变化。单一职责原则可以看做是低耦合、高内聚在面向对象原则上的引申,将职责定义为引起变化的原因,以提高内聚性来减少引起变化的原因。

C. 依赖倒置原则,其核心思想是:依赖于抽象。具体而言就是高层模块不依赖于底层模块,二者都同依赖于抽象;抽象不依赖于具体,具体依赖于抽象。

D. 接口隔离原则,其核心思想是:使用多个小的专门的接口,而不要使用一个大的总接口。具体而言,接口隔离原则体现在:接口应该是内聚的,应该避免“胖”接口。一个类对另外一个类的依赖应该建立在最小的接口上,不要强迫依赖不用的方法,这是一种接口污染。

E. Liskov替换原则,其核心思想是:子类必须能够替换其基类。这一思想体现为对继承机制的约束规范,只有子类能够替换基类时,才能保证系统在运行期内识别子类,这是保证继承复用的基础。Liskov替换原则是关于继承机制的设计原则,Liskov替换原则能够保证系统具有良好的拓展性,同时实现基于多态的抽象机制,能够减少代码冗余,避免运行期的类型判别。


2. 类的五种关系

依赖关系(Dependency)---关联关系(Association)---聚合(Aggregation)---组合(Composition)---泛化(Generalization)

1. 依赖关系是五种关系中耦合最小的一种关系。使用虚线加箭头表示。(A类中实例化另外B类的对象,A--->B)

2. 关联关系是实线加箭头表示,表示类之间的关系比依赖要强。(A类的对象作为B类的内部属性,A->B)

3. 聚合关系通过一个空心的菱形加箭头表示。(A类离开B类不会被销毁)

4. 组合关系通过实心的菱形加箭头表示(A类离开B类会被销毁)

5. 泛化通过实线加空心箭头表示(A类继承B类或者实现B接口)


3. 桥接模式

A. 桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。(桥接模式的用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化”。)

B. 优点----1.桥接模式提高了系统的可扩充性。2.实现细节对客户透明,可以对用户隐藏实现细节。3.分离接口及其实现部分。桥接模式使用“对象间的组合关系”解耦了抽象和实现之间固有的绑定关系,使得抽象和实现可以沿着各自的维度来变化。 所谓抽象和实现沿着各自维度的变化,即“子类化”它们,得到各个子类之后,从而获得不同平台上的不同型号。

C. 使用的情况---1.如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性, 避免在两个层次之间建立静态的联系。2.设计要求实现化角色的任何改变不应当影响客户端,或者说实现化角色的改变对客户端是完全透明的。3.一个构件有多于一个的抽象化角色和实现化角色,系统需要它们之间进行动态耦合。4.虽然在系统中使用继承是没有问题的,但是由于抽象化角色和具体化角色需要独立变化,设计要求需要独立管理这两者。

D. 模型应用---java虚拟机


:  在桥接模式中不仅Implementor具有变化(ConcreateImplementior),而且Abstraction也可以发生变化(RefinedAbstraction),这是一个多对多的关系,而且两者的变化是完全独立的。RefinedAbstractionConcreateImplementior之间松散耦合,它们仅仅通过AbstractionImplementor之间的聚合关系联系起来。


猜你喜欢

转载自blog.csdn.net/qq_41008202/article/details/79931443