装饰者模式:
装饰者模式能在不改变原有对象的基础上动态的给一个对象添加一些额外的职能来拓展对象的功能
结构图
结构图.png简答来讲,我们需要一个主体(Component),并需要一些装饰类(Decorator)对主体进行一个装饰,主体也可以没有装饰类装饰;
举例
以去汉堡店套餐为例,现在想组一个汉堡套餐,首先定义一个抽象清单类,进行添加食品,计算价钱;
public abstract class Menu {
public abstract String add();
public abstract Integer price();
}
汉堡套餐,汉堡作为一个主体:
public class Hamburger extends Menu {
@Override
public String add() {
return "一个鸡腿堡";
}
@Override
public Integer price() {
return 8;
}
}
还需要为汉堡配一些小食,小食有很多,有可乐,薯条等,我们需要定义一个小食的父类,如果各个小食需要有特殊的功能,我们可以给将该父类定义成抽象类,可乐和薯条都继承该类:
public class Refreshments extends Menu {
private Menu menu;
public Refreshments(Menu menu) {
this.menu = menu;
}
@Override
public String add() {
return this.menu.add();
}
@Override
public Integer price() {
return this.menu.price();
}
}
public class Cola extends Refreshments {
public Cola(Menu menu) {
super(menu);
}
@Override
public String add() {
return super.add()+" 一杯可乐";
}
@Override
public Integer price() {
return super.price()+6;
}
}
public class Chips extends Refreshments {
public Chips(Menu menu) {
super(menu);
}
@Override
public String add() {
return super.add()+" 一份薯条";
}
@Override
public Integer price() {
return super.price()+7;
}
}
网友评论