定义
装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。
结构图
使用场景
可用于功能的扩展,也就是为对象新增额外的行为。
代码实现
Java代码实现
先建立一个抽象类,所有类都继承这个抽象类
public abstract class component{
String description = "None";
public String getDescription(){
return description;
}
}
在创建一个被继承者
public class People extends Component{
String description = "I am people.I can working";
public String getDescription(){
return description;
}
}
接着创建一个装饰者
public class Shopping extends Component{
String description = "shopping";
private Component component;
public Shopping(Component component){
this.component = component;
}
@Override
public String getDescription(){
return component.getDescription + "," + description + ".";
}
}
最后运行文件
public class Run{
public static void main(String[] args){
Component people = new People();
System.out.println(people.getDescription());
Component Shopping = new Shopping(people):
System.out.println(Shopping.getDescription());
}
}
运行结果:>>I am people.I can working. >> I am people.I can working,shopping.
python代码实现
被装饰者
class People:
def __init__(self):
self.description = "I am people.I can working"
def getDescription(self):
return self.description + "."
装饰者
class Shopping:
def __init__(self,people):
self.description = ",shoping"
self.people = people
def getDescription(self):
return self.people.getDescription() + self.description + "."
运行文件
people = People()
print(people.getDescription())
shopping = Shopping(people)
print(shopping.getDescription())
运行结果:>>I am people.I can working. >>I am people.I can working.,shoping.