//需要被装饰的对象
public
class
Person
{
private
String name;
public
Person(String name)
{
super();
this.name = name;
}
public
Person()
{
super();
}
public
void show(){
System.out.println("装扮的"+name);
}
}
//功能的抽象类
public
class
Finery
extends
Person{
protected
Person component;
//打扮
public
void
Decorate(Person component){
this.component = component;
}
@Override
public
void show(){
if(component !=
null){
component.show();
}
}
}
//继承功能类
public
class
BigTrouser
extends
Finery
{
@Override
public
void show(){
System.out.println("垮裤");
super.show();
}
}
//继承功能类
public
class
TShirts
extends
Finery
{
@Override
public
void show(){
System.out.println("大T恤");
super.show();
}
}
//继承功能类
public
class
WearSneakers
extends
Finery
{
@Override
public
void show(){
System.out.println("破球鞋");
super.show();
}
}
//继承功能类
public
class
WearSuit
extends
Finery{
@Override
public
void show(){
System.out.println("西装");
super.show();
}
}
//动态给对象添加功能
public
class
Test
{
public
static
void main(String[] args)
{
Person xc =
new
Person("小菜");
System.out.println("第一种装扮:");
WearSneakers w =
new
WearSneakers();
WearSuit ws =
new
WearSuit();
BigTrouser bt =
new
BigTrouser();
/*
* 首先实例化person对象
* 再用WearSneakers类包装person
* 再用WearSuit类来包装WearSneakers对象
* 再用BigTrouser类包装WearSuit对象
* 最终执行BigTrouser的show方法。
*
*/
w.Decorate(xc);
ws.Decorate(w);
bt.Decorate(ws);
bt.show();
}
}
第一种装扮:
垮裤
西装
破球鞋
装扮的小菜
什么时候使用装饰模式:
往期回顾
设计模式(一) | 啥是工厂模式和策略模式?