标签: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