您的位置:首页 > 其它

装饰模式----设计模式系列

2015-11-01 15:21 453 查看
装饰模式:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。

优点:把类中的装饰功能从类中搬移去除,这样可以简化原有的类。可以有效地把类的核心职责和装饰功能区分开,而且可以去除相关类中重复的装饰逻辑。

使用场景:为已有功能动态地添加更多功能的一种方式。

下面以一个小Demo为例讲解:Tshirts(Shoe、Kuzi) extends Finery ,Finery extends Person 。Decorate为测试类

(1)被装饰的类

public class Person {

private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public void show(){
System.out.println("装扮的"+name);
}

}

(2)装饰类

public class Finery extends Person {

protected Person mPerson;

public void decorate(Person person) {
mPerson = person;
}

@Override
public void show() {
if (mPerson != null) {
mPerson.show();
}

}

}

(3)具体装饰类Tshirt  (Shoe和Kuzi同理)
public class TShirts extends Finery {

@Override
public void show() {

System.out.println("TShirts");
super.show();
}
}(4)测试类
/**装饰者模式*/
public class Decorate {

public static void main(String[] args) {

Person mPerson = new Person();
mPerson.setName("董永康");

TShirts mTShirts = new TShirts();
Kuzi mKuzi = new Kuzi();
Shoe mShoe = new Shoe();

mTShirts.decorate(mPerson);
mKuzi.decorate(mTShirts);
mShoe.decorate(mKuzi);
mShoe.show();

}

}

总结:两层继承关系,Tshirts(Shoe、Kuzi) extends Finery extends Person
Finery作为连接Person和Tshirts类的“桥梁”,子类show中调用super.show,在装饰的时候传递子类对象,然后调用子类对象的show方法。循环直到结束。这样做使每个装饰对象的实现和如何使用这个对象分离开了。每个装饰对象只关心自己的功能,不需要关心如何被添加到对象链当中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: