软件构造-decorator 设计模式
程序员文章站
2022-03-10 14:15:01
...
在设计ADT时,我们可能会遇到需要在一些通用操作上添加不同特性的问题,这时候如果只是简单的使用继承就可能会出现组合爆炸的问题,产生庞大而复杂的继承树,为了解决这些问题,使用decorator设计模式无疑是一种很好的办法。
decorator的实现方式
首先我们需要定义一个接口里面包含了装饰物执行的公共操作,为了方便理解我们举一个实际的例子,例子的目的是通过add、remove,isexist这一组通用操作来实现ADT:集合(即没有重复的元素)。
//通用操作
public interface vector<L>{
//向容器中添加一个元素
public void add(L element);
//移除一个容器中的元素
public void remove(L element);
//判断一个元素是否存在
public boolean isexist(L element);
}
之后我们要使用一个类来实现这些通用操作
public class CommonVector<L> implements vector<L>{
private List<L> array=new ArrayList<>();
public void add(L element){
array.add(element);
}
public void remove(L element){
array.remove(element);
}
public boolean isexist(L element){
return array.contains(element);
}
}
我们还需要定义一个抽象类,它是所有装饰类的基类,里面包含的成员变量。
//装饰类的基类
public abstract class Decorator<L> implements vector<L>{
//将操作委托给一个vector<L>类的实例
protected vector<L> vec;
public Decorator(vector<L> vec){
this.vec=vec;
}
public void add(L element){
vec.add(element);
}
public void remove(L element){
vec.remove(element);
}
public boolean isexist(L element){
return vec.isexist(element);
}
}
现在我们就可以开始写装饰类了。
//实现装饰类:集合
public class set<L> extends Decorator<L>{
public set(vector<L> vec){
super(vec);
}
public void add(L element){
if(!isexist(element))
super.add(element);
}
}
至此我们就可以使用装饰类来创建一个集合了
//set就是我们想要的集合容器
vector<Integer> set=new set<>(new CommonVector<>());
上一篇: 软件构造笔记策略设计模式
推荐阅读
-
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
-
PHP设计模式(八)装饰器模式Decorator实例详解【结构型】
-
设计模式之(十)装饰模式(DECORATOR)
-
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
-
php设计模式 Decorator(装饰模式)
-
.net设计模式之装饰模式(Decorator)
-
JavaScript设计模式之构造器模式(生成器模式)定义与用法实例分析
-
学习php设计模式 php实现装饰器模式(decorator)
-
设计模式之装饰器模式(decorator pattern)
-
javascript设计模式之对象工厂函数与构造函数详解