java设计模式之装饰模式
2016-04-26 20:10
585 查看
还是设计一个应用场景来理解
模拟程序里有一个已知功能是这样的:有一个宠物对象Pet,实现了Animal接口,它会卖萌cute;
现在,我们对宠物的卖萌功能进行扩展。让它在卖萌完后给大家说一句。
使用装饰模式怎么实现该功能?
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对象,动态扩展了其功能。
模拟程序里有一个已知功能是这样的:有一个宠物对象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对象,动态扩展了其功能。
相关文章推荐
- eclipse 和 android studio 快捷键对比
- 自己写的java excel导出工具类
- 学习SPRING MVC
- Java线程之interrupt终止线程,Thread中的主要方法(五)
- JAVA学习15_Java 中与时间有关的几个问题
- Spring框架带给我们的好处
- java虚拟机的垃圾回收机制(转载)
- springMVC(三)快速入门(注解版本)
- 【Java】String类的方法介绍
- Java线程之1.5版新特性多生产者多消费者(四)
- JAVA BigDecimal 小数处理
- Eclipse查看和修改web项目部署位置
- paho java log输出
- MyEclipse2014版本上的原有的SH项目添加Hibernate支持。
- java 面向对象编程(OOP)-个人理解
- Java虚拟机如何加载Class文件
- java中四种操作(dom、sax、jdom、dom4j)xml方式详解与比较
- Spring的事务管理总结
- Java transient关键字
- Java学习笔记-多态