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

装饰设计模式

时间:2017-03-23 22:16:39      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:http   pre   const   auto   ima   nts   one   使用   public   

装饰设计模式:就是使用被装饰类的一个子类的实例,在客户端这个子类的实例交给装饰类,是继承的替代方案

  如一个手机设计

1、要设计一个手机,自带打电话功能,而手机属于一个接口

2、手机下面有个具体的子类,属于确定的对象,比如Iphone,但是Iphone也是一个手机,要实现手机接口

3、手机有比如彩铃、听音乐等功能,这些功能就属于装饰类,把它们弄成一个装饰类,也需要实现手机接口。

4、彩铃功能,属于继承第3部的装饰类的功能,比如设置彩铃是在手机打电话之前实现的。

5、听音乐功能,属于继承第3部的装饰类的功能,比如设置听音乐是在手机打电话之后实现的。

6、测试手机,首先创建Iphone手机的具体对象,而Iphone也是一个手机;实现手机装饰功能:彩铃、听音乐。

 

  代码如下

package cn.idcast5;

public interface Phone {
public  abstract void call();
}
package cn.idcast5;

public class Iphone implements Phone{

	@Override
	public void call() {
		// TODO Auto-generated method stub
		System.out.println("手机可以打电话了");
	}

}
package cn.idcast5;

public abstract class PhoneDecorate implements Phone {
  private Phone p;
  public  PhoneDecorate(Phone p) {
	  this.p=p;
  }
	@Override
	public void call() {
		// TODO Auto-generated method stub
          this.p.call();
	}

}
package cn.idcast5;

public class RingPhoneDecorate extends PhoneDecorate {
public RingPhoneDecorate(Phone p) {
		super(p);
	}
	@Override
	public void call() {
		// TODO Auto-generated method stub
		System.out.println("手机可以听彩铃了");
		super.call();
	}
}
package cn.idcast5;

public class MusicPhoneDecorate extends PhoneDecorate {
public MusicPhoneDecorate(Phone p) {
		super(p);
		// TODO Auto-generated constructor stub
	}

@Override
	public void call() {
		// TODO Auto-generated method stub
		super.call();
		System.out.println("手机可以听音乐了");
	}
}
package cn.idcast5;

public class PhoneDemo {
public static void main(String[] args) {
	Phone p = new Iphone();
	PhoneDecorate pd = new RingPhoneDecorate(new MusicPhoneDecorate(p));
	pd.call();
}
}

  

  结果显示为:

 技术分享

装饰设计模式

标签:http   pre   const   auto   ima   nts   one   使用   public   

原文地址:http://www.cnblogs.com/zengjiao/p/6607000.html

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