装饰模式
-
动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活
- 装饰模式是为已有功能动态地添加更多功能的一种方式
- 优势:
- 把类中的装饰功能从类中搬移取出,可以简化原有类
- 有效地把类的核心职责和装饰功能区分开来,去除重复的装饰逻辑
代码示例
class Person{
private String name;
public Person(){
}
public Person(String name){
this.name=name;
}
public void show(){
System.out.println("装扮的"+name);
}
}
class Finery extends Person{
protected Person component;
public void Decorate(Person component){
this.component=component;
}
@Override
public void show() {
if(component!=null){
component.show();
}
}
}
class TShirts extends Finery{
@Override
public void show() {
System.out.println("大T恤");
super.show();
}
}
class BigTrouser extends Finery{
@Override
public void show() {
System.out.println("垮裤");
super.show();
}
}
class Sneakers extends Finery{
@Override
public void show() {
System.out.println("破球鞋");
super.show();
}
}
class Suit extends Finery{
@Override
public void show() {
System.out.println("西装");
super.show();
}
}
class Tie extends Finery{
@Override
public void show() {
System.out.println("领带");
super.show();
}
}
class LeatherShoes extends Finery{
@Override
public void show() {
System.out.println("皮鞋");
super.show();
}
}
public class DecoratorMood {
public static void main(String[] args) {
Person Txy = new Person("txy");
System.out.println("第一种搭配:");
Sneakers pqx = new Sneakers();
BigTrouser kk = new BigTrouser();
TShirts dtx = new TShirts();
pqx.Decorate(Txy);
kk.Decorate(pqx);
dtx.Decorate(kk);
dtx.show();
System.out.println("第二种搭配:");
Sneakers pqx2 = new Sneakers();
LeatherShoes px2 = new LeatherShoes();
BigTrouser kk2 = new BigTrouser();
Tie ld = new Tie();
pqx2.Decorate(Txy);
px2.Decorate(pqx2);
kk2.Decorate(px2);
ld.Decorate(kk2);
ld.show();
}
}