初识装饰者设计模式和适配器设计模式
前言:
本文仅为个人学习记录笔记,如有错误之处敬请谅解,欢迎大佬多多指点!
一、装饰者设计模式
实现步骤:
【1】先定义一个公用的接口
【2】被装饰者去实现接口中所有的方法
【3】装饰者将被装饰者作为参数传递到本类构造以及定义到成员变量中,这一步是为了
后面能够在实现方法中能够达到调用被装饰者原有代码方法。
装饰者也实现该公用接口,然后重写了和被装饰者一样的方法,因为装饰的核心是在不
改变原有的类的构造以及方法的情况下对原有的功能进行补充,所以装饰者重写方法时,
在重写方法里面调用被装饰者原有的方法,对要增强的方法进行功能补充,然后调用装
饰者对象达到我们所要完成的功能。
缺点说明:为了达到对方法进行增强,我们这里通过接口来将两者给联系在一起,
装饰者和被装饰者都被迫重写了接口中的所有方法,造成了大量的代码的冗余,每当我们要
要获取一个新的功能不同的装饰者和被装饰者,又得重写接口中所有的代码了
二、适配器设计模式
【1】核心思想:上文中提到的装饰者设计模式,因为装饰与被装饰者之间是通过接口达到
实现方法增强的,所以因为是接口的原因,所以重写了大量的方法。针对这个问题,为何我
们不换一种思维去尽量减少代码的冗余,能不能只重写一次接口,从而达到对方法的增强
这里的适配器设计模式的核心思维在,继承,继承不需要重写所有的方法,可以选择性的重写
我们可以在装饰者与接口之间定义一个中间的父类,去完成我们对方法重写的选择,让这个父类
去代替我们实现接口中所有的方法,我们只要继承他去完成我们所要达到的方法增强的目的就行。
这样以后我们需要对不同方法编写不同的装饰者的时候就无需重写接口所有方法了,在一定程度
上减少了代码的冗余。
【2】实现步骤
(1)定义一个接口
(2)定义一个抽象父类,去重写接口中的方法
(3)定义一个目标类,去重写接口中的方法
(4)定义一个装饰者,去继承父类,定义目标类的成员变量,满参构造,重写我们要增强的方法
(5)使用的时候要调用被装饰者的普通方法,直接通过new对象使用,要使用增强方法
则通过创建装饰者对象,传递被装饰者的对象参数,然后调用即可