您的位置:首页 > 编程语言 > Java开发

java设计模式之装饰模式

2016-04-26 20:10 585 查看
还是设计一个应用场景来理解

模拟程序里有一个已知功能是这样的:有一个宠物对象Pet,实现了Animal接口,它会卖萌cute;

现在,我们对宠物的卖萌功能进行扩展。让它在卖萌完后给大家说一句。
public interface Animal {

/**
* 卖萌
*/
public void cute();

}
public class Pet implements Animal {

public void cute() {
System.out.println("我是萌宠,职业卖萌 ^_^");
}

}


使用装饰模式怎么实现该功能?

1、新建Cat对象同样实现Animal接口;
2、Cat对象持有Animal类型对象,Cat调用Animal类型卖萌方法,然后再扩展“给大家说一句”的功能;

public class Cat implements Animal{

private Animal animal;

public Cat(Animal animal){
this.animal = animal;
}

public void cute() {
animal.cute();
say();
}

private void say(){
System.out.println("我是一只小猫咪,喵喵喵~~");
}
}

客户端修改调用代码

Pet pet = new Pet();

pet.cute();

修改为

Pet pet = new Pet();

Animal cat = new Cat(pet);

cat.cute();

输出结果:

我是萌宠,职业卖萌 ^_^

我是一只小猫咪,喵喵喵~~










我们可以看到,使用装饰模式可以不修改原Pet对象,动态扩展了其功能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: