码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式之装饰者模式

时间:2017-11-04 22:25:41      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:out   装饰者模式   多个   har   abs   需要   err   取出   音乐   

设计模式之装饰着模式

    装饰者模式其实就是为了增强类,增强类的要素

      a.增强类必须实现被增强类的接口

      b.增强类中必须含有被增强类的应用

  创建一个手机接口(Phone)  

/*
 * 创建一个手机接口
 */
public interface Phone {
	public abstract void call();
}

  创建手机的实现类(HuaWeiPhone)

/*
 * 	手机的实现类
 */
public class HuaWeiPhone implements Phone{
	@Override
	public void call() {
		System.out.println("打电话中......");
	}

}

  创建增强手机的实现类(在打电话之前需要响铃)

/**
 * 1.增强类必须和被增强类实现同一接口
 * 			实现Phone接口
 * 2.增强类中必须引用被增强类的对象
 *          引用HuaWeiPhone
 */
public class HuaWeiDecorate  implements Phone{

	private Phone HuaWeiPhone;
	public HuaWeiDecorate(Phone HuaWeiPhone) {
		this.HuaWeiPhone=HuaWeiPhone;
	}
	@Override
	public void call() {
		System.out.println("电话铃响了....");
		HuaWeiPhone.call();
	}
}

  测试方法:

        public static void main(String[] args) {
		HuaWeiPhone hwp=new HuaWeiPhone();
		HuaWeiDecorate hd=new HuaWeiDecorate(hwp);
		hd.call();
	}    

      在打完电话后想听音乐

public class HuaWeiDecorate1 implements Phone{

	private Phone HuaWeiPhone;
	public HuaWeiDecorate1(Phone HuaWeiPhone) {
		this.HuaWeiPhone=HuaWeiPhone;
	}
	@Override
	public void call() {
		HuaWeiPhone.call();
		System.out.println("音乐响了....");
	}
}

  测试方法:

        public static void main(String[] args) {
		HuaWeiPhone hwp=new HuaWeiPhone();
		HuaWeiDecorate hd=new HuaWeiDecorate(hwp);
		HuaWeiDecorate1 hd1=new HuaWeiDecorate1(hwp);
		hd.call();
		hd1.call();
	}

  这样我们就需要对于这个装饰类进行抽取出来,若果有多个装饰类这样我们就需要进行抽取

/*
 * 	手机的实现类
 */
public class HuaWeiPhone implements Phone{
	@Override
	public void call() {
		System.out.println("手机可以打电话 !");
	}

}

  

public class HuaWeiDecorate  extends DecorateClass{
	public HuaWeiDecorate(Phone p) {
		super(p);
	}
	@Override
	public void call() {
		System.out.println("电话铃响了....");
		super.call();
	}
}

  

public class HuaWeiDecorate1 extends DecorateClass{
	public HuaWeiDecorate1(Phone p) {
		super(p);
	}
	@Override
	public void call() {
		super.call();
		System.out.println("音乐响了");
	}
}

  

public  class DecorateClass implements Phone{
	private Phone p;
	public DecorateClass(Phone p) {
		this.p=p;
	}
	@Override
	public void call() {
		this.p.call();
	}
}

  

      测试类:

public static void main(String[] args) {
	HuaWeiPhone hwp=new HuaWeiPhone();
	Phone hd=new HuaWeiDecorate(hwp);
	Phone h=new HuaWeiDecorate1(hd);
	h.call();	
}

  

           技术分享

 

设计模式之装饰者模式

标签:out   装饰者模式   多个   har   abs   需要   err   取出   音乐   

原文地址:http://www.cnblogs.com/fjkgrbk/p/Dacorate.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!