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