zoukankan      html  css  js  c++  java
  • 设计模式之装饰者模式

    设计模式之装饰着模式

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

          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();	
    }
    

      

               

  • 相关阅读:
    HDU4911——归并排序——Inversion
    HDU5400——Arithmetic Sequence
    HDU5396——区间DP+排列组合——Expression
    DFS(连通块) ZOJ 2743 Bubble Shooter
    Codeforces Round #345 (Div. 2)
    Codeforces Round #344 (Div. 2)
    8VC Venture Cup 2016
    Manthan, Codefest 16
    DP(记忆化搜索) + AC自动机 LA 4126 Password Suspects
    全排列 UVA 11525 Permutation
  • 原文地址:https://www.cnblogs.com/fjkgrbk/p/Dacorate.html
Copyright © 2011-2022 走看看