大话设计模式 笔记

面向对象:封装 继承 多态


UML类图

第一行:类名(斜体表示抽象类,<< interface >>表示接口)
第二行:字段或属性
第三行:方法 +表示public -表示private #表示protected

虚线空心箭头表示实现接口 - - - - - ▷
实线空心箭头表示集成类 ———-▷

实线箭头表示关联关系,A类是B类的一个属性 B———>A
菱形箭头表示聚合关系,例如雁群类中有个属性是大雁[] 雁群 ◇——–> 大雁
还有依赖关系和组合关系

单一职责原则

SRP:就一个类而言,应该仅有一个引起它变化的原因

在类的数量和单个类的职责之间求取平衡。

开放-封闭原则

对扩展开放,对更改封闭

在我们最初编写代码时,假设变化不会发生,当变化发生时,判断这种变化是否具有代表性,如果是,创建抽象来隔离以后发生的同类变化,尽量做到:面对需求,对程序的改动是通过增加代码进行的,而不是更改现有的代码
切记:对代码每个部分都刻意地抽象并不是好事

依赖倒转原则

针对接口编程,不要对实现编程

里氏代换原则

在任何地方,子类可以替换父类

因为有了里氏替换原则,才让依赖倒转成为可能,高层模块只需要依赖父类,扩展时只需要增加子类,由于子类刻意替换父类,所以高层模块无需修改。

三层架构

表示层
业务逻辑层
数据访问层(Data Access Layer)


简单工厂

一个接口有多种实现,或者一个类有多个子类,要根据条件创建不同的类的实例,将switch case语句放在简单工厂封装起来,具体的选择过程对客户端不可见,每次要创建实例只需调用简单工厂的创建方法,传入参数即可。
使用简单工厂前,客户端要知道所有的子类,自己做判断
使用简单工厂后,客户端只需要知道父类(由于里氏代换原则)和工厂类,不用自己做判断

策略模式

简单工厂只是封装了对实现类的选择过程,作为客户端,还是需要知道对象类(Bird)和工厂类(BirdFactory):

    Bird bird = BirdFactory.getBird(birdType);
    bird.fly();

如果可以把方法也让另一个类来调用就可以让客户端只知道一个类了,我们把BirdFactory类名改成BirdContext,直接在它里面增加一个属性Bird,简单工厂里是把Bird返回给客户端,客户端再用Bird调用方法,那现在不要把Bird返回回来,直接赋值给BirdContext里面的字段,然后客户端直接调用BirdContextfly方法,BirdContext再调用属性Birdfly方法,一切就大功告成了,对客户端又隐藏掉一个类。
上面说的这种方式其实是把策略模式和简单工厂做了结合,一般如果只是策略模式,就仅仅是封装方法的话,客户端确实只知道一个类,但是还是要写条件语句做判断,有点像回到了还没使用简单工厂的情况

装饰模式

(未完待续)

猜你喜欢

转载自blog.csdn.net/u010588262/article/details/81544769