设计模式03——结构模型、行为模式

106 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

结构模型

简述代理模式

代理模式为其他对象提供一种代理以控制对这个对象的访问

优点:可以增强目标对象的功能,降低代码耦合度,扩展性好。

缺点:在客户端和目标对象之间适配代理对象会导致请求处理速度变慢,增加系统复杂度。

静态代理:程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了。

动态代理:程序运行期间动态的生成,所以不存在代理类的字节码文件。代理类和委托类的关系是在程序运行时确定。

动态代理相比于静态代理的优点:

抽象角色中(接口)声明的所有方法都被转移到调用处理器一个集中的方法中处理,这样,我们可以更加灵活和统一的处理众多的方法

动态代理流程:将真实类对象传入处理机接口(传入类加载器,通过反射获得接口结构使得动态生成的代理类实现该接口,处理器对象) ,主要做统一的流程控制。再生成代理对象,然后调用代理对象的方法。

简述适配器模式

适配器模式将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作。

有两种实现方式:

继承:适配器类继承被适配的类实现目标接口,使得调用目标接口的方法可以使用被适配的类。

组合:适配器类将被适配的类作为成员类实现目标接口,使得调用目标接口的方法可以使用被适配的类。

简述装饰器模式

装饰者模式可以动态地给对象添加一些额外的属性或行为,即需要修改原有的功能,但又不愿直接去修改原有的代码时,设计一个Decorator套在原有代码外面。

实现流程:

接口:被修饰的类修饰器类实现同一个接口,修饰器类中将被修饰的类作为成员类组合关系),用具体修饰器类继承修饰器类,子类中设计修饰方法。

继承:修饰器类与被修饰类继承同一个父类,再由继承修饰器类的具体修饰器类增强被修饰类(组合关系)。

I/O流使用的是该模式,修饰器类FilterInputStream与被修饰类FileInputStream都继承父类InputStream,修饰器类FilterInputStream的子类具体修饰器类BufferedInputStream增强被修饰类FileInputStream。

行为模式

简述模板模式

模板模式定义了一个操作中的算法骨架,并将一些步骤延迟到子类,适用于抽取子类重复代码到公共父类。可以封装固定不变的部分,扩展可变的部分。但每一个不同实现都需要一个子类维护,会增加类的数量。

实现流程:将子类共有的处理流程提取到抽象父类中,流程方法用final关键词修饰(类似钩子函数),父类中定义一些需要子类重写的抽象方法和不需要重写的非抽象方法,具体的子类调用流程方法即可。

image-20220327210545576

image-20220327210559532

image-20220327210605704

简述观察者模式

观察者模式表示一种对象与对象之间具有的依赖关系,当一个对象的状态发生改变时,所有依赖于它 的对象都得到通知并被自动更新。

简述策略模式

策略模式对应于解决某一个问题的一个算法族,允许用户从该算法族中任选一个算法解决某一问题,同时可以方便的更换或增加算法,并且由客户端决定调用哪个算法。

\