(本文为软构博客第六篇)
第一类是创建型模式。
1.工厂方法模式
用途:当client不知道/不确定要创建哪个具体类的实例,或者不想在client代码中指
明要具体创建的实例时,用工厂方法。
使用方法:定义一个用于创建对象的接口,让该接口的子类型来决定实例化哪一个类,从
而使一个类的实例化延迟到其子类。
举例:停车场具体实现有两种,一种是停汽车的,一种是停巴士的。那么可以将停车场设计为接口,具体的两个类去实现这个接口。客户端使用时创建实例的时候只需要new 具体实例即可。
或者静态实现。
工厂方法模式体现的是OCP原则。
第二类是结构模式
1.适配器模式
用途:将某个类/接口转换为client期望的其他形式,解决类之间接口不兼容的问题
使用方法:增加一个接口,将已存在的子类封装起来,client面向接口编程,从而隐藏了具体子类。
有两种可以实现,一种是委托,一种是继承。
举例:具体实现类实现接口里的方法,在其中new一个别的类的实例,调用别的类的方法,通过这个操作完成适配。比如此处,解决传入的参数不一致的问题。而客户端调用的时候只要创建具体实现类实例并按照自己想法传入参数调用方法即可。
关键就在于实现类中将操作委托给别的类,在这个过程中完成适配
2.装饰器模式
用途:用每个子类实现不同的特性,可以完成一种种特性的叠加。
使用方法:对每一个特性构造子类,通过委派机制增加到对象上。关键在于1)将共同具有的操作设置为接口。2)定义一个抽象的装饰器基类实现接口。注意这个抽象类中要将接口纳入成员变量中,并且将接口类型作为参数传入抽象类构造器中构造。当然如果装饰器有额外添加的属性就纳入成员变量中。构造器而接口的那些方法可以设置为抽象方法不需要写具体实现,留待具体子类实现。或者是委托给传进来的接口类。3)具体装饰方法子类继承这个装饰器抽象类,构造方法参数传入接口类型(同装饰器基类的传入参数保持一致),构造方法用super(接口类型)(即使用父类装饰器基类的构造方法即可)。重写方法的时候,如果父类没有实现,则先用传入的接口类实例调用方法,后面再加入要加的装饰语句(额外功能)。如果父类有委托给接口实现,则先super即可。
客户端实现只需要一层层new即可。注意是递归实现,所以内层的会先实现!
举例:这里的是委托出去了,具体实现super即可
这里的是基类没实现,具体子类要调用接口方法