JAVA测试装饰者模式
2015-09-09 00:51
549 查看
package shb.java.demo; /** * 测试装饰者模式 * @package :shb.java.demoJava02 * @author shaobn * @Describe : * @Time: 2015-9-9 上午12:17:00 */ public class TestDecrator { /** * @author shaobn * @Describe : * @param args * @Time : 2015-9-9 上午12:16:49 */ public static void main(String[] args) { // TODO Auto-generated method stub CampusActivity ca = new AdvancedAct(new CampusInnerAct()); ca.play(); CampusActivity ca_2 = new AdvancedAct(new CampusOuterAct()); ca_2.play(); } } interface CampusActivity{ void play(); } class CampusInnerAct implements CampusActivity{ public void play(){ System.out.println("和小伙伴去打篮球"); } } class CampusOuterAct implements CampusActivity{ public void play(){ System.out.println("和小伙伴去市中心逛街"); } } class Campus__ implements CampusActivity{ public void play(){ } } class AdvancedAct implements CampusActivity{ private CampusActivity ca; public AdvancedAct(CampusActivity ca){ this.ca = ca; } public void play(){ ca.play(); System.out.println("骑着电动车去打排球,开着汽车去参加唱歌"); } }
package shb.java.demo; /** * 测试装饰者模式 * @package :shb.java.demoJava02 * @author shaobn * @Describe : * @Time: 2015-9-9 上午12:17:00 */ public class TestDecrator_2 { /** * @author shaobn * @Describe : * @param args * @Time : 2015-9-9 上午12:16:49 */ public static void main(String[] args) { // TODO Auto-generated method stub AdCampusInnerAct acia = new AdCampusInnerAct(); acia.play(); AdCampusOuterAct acoa = new AdCampusOuterAct(); acoa.play(); } } interface CampusActivity{ void play(); } class CampusInnerAct implements CampusActivity{ public void play(){ System.out.println("和小伙伴去打篮球"); } } class AdCampusInnerAct extends CampusInnerAct{ public void play(){ super.play(); System.out.println("骑着电动车和小伙伴去打排球"); } } class CampusOuterAct implements CampusActivity{ public void play(){ System.out.println("和小伙伴去市中心逛街"); } } class AdCampusOuterAct extends CampusOuterAct{ public void play(){ super.play(); System.out.println("开着汽车出去唱歌"); } } class Campus__{ public void play(){ } } class AdCampus__ extends Campus__{ public void play(){ //增强功能...... } }
第一段为使用装饰者模式,第二段为使用继承。
其实我们从两段代码可以看出,我们的目的是想让原有的功能增强,所以才衍生出更加丰富的方法,因此我们自然会想到继承。同时有一个问题也随之出现,当我们使用继承的时候,发现需要增加的类变得很多时,我们都需要重新写一个类去继承父类,从而重写方法。这样会增加很大的负担,而且耦合性很高,不易于程序的扩展。随之而来,装饰者模式到来。我们只需定义一个接口的子类,然后拿到同一个接口的引用,继而去增强属于该接口引用下的子类对象的方法即可。
两段代码比对,比较明显看出优劣。
如有错误,希望大家纠正。
不早了,睡觉了。。。。
2015-09-09
相关文章推荐
- 爱心java
- java之 ------ 类反射【详解】
- springmvc处理静态资源
- Ubuntu12.04安装JDK1.7
- Json转换为java对象
- 大家都用什么Maven插件?及本人的几个常用插件分享
- java synchronized详解
- 使用spring-loaded开源项目,实现java程序和web应用的热部署
- java volatile内存机制
- Eclipse 点击ctrl键 open declaration;open implementat
- struts2——文件上传
- struts2——多文件上传
- struts2——拦截器
- java简单的计算器类
- java--xml
- Curator api的使用
- 使用spring-loaded开源项目,实现java程序和web应用的热部署
- eclipse中的快捷键
- Java对象数组
- 开发 Web 应用的几个坑