<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    我的漫漫程序之旅

    專注于JavaWeb開發
    隨筆 - 39, 文章 - 310, 評論 - 411, 引用 - 0
    數據加載中……

    學習裝飾者模式(Decorator)

    1、定義及作用

          該模式以對客戶端透明的方式擴展對象的功能。

    2、涉及角色
          抽象構件角色:定義一個抽象接口,來規范準備附加功能的類。

          具體構件角色:將要被附加功能的類,實現抽象構件角色接口。

          抽象裝飾者角色:持有對具體構件角色的引用并定義與抽象構件角色一致的接口。

          具體裝飾角色:實現抽象裝飾者角色,負責為具體構件添加額外功能。

     
      3、簡單實現
    抽象構件角色java 代碼:

    package com.pattern.decorator2;
    /**
     * 抽象構件角色
     * 
    @author zdw
     *
     
    */

    public interface Component
    {
        
    //默認方法A
        void functionA();
    }


    具體構件角色:
    package com.pattern.decorator2;
    /**
     * 具體構件角色
     * 
    @author zdw
     *
     
    */

    public class ConcreateComponent implements Component
    {
        
        
    public void functionA()
        
    {
            System.out.println(
    "Function A");
        }


    }


    抽象裝飾者角色:
    package com.pattern.decorator2;

    /**
     * 抽象裝飾者角色
     * 
     * 
    @author zdw
     * 
     
    */

    public class Decorator implements Component
    {
        
    //抽象構件角色的引用
        private Component component;
        
        
    public Decorator(Component component)
        
    {
            
    this.component = component;
        }


        
    public void functionA()
        
    {
            component.functionA();
        }


    }

    具體裝飾者角色1:
    package com.pattern.decorator2;
    /**
     * 具體裝飾者角色
     * 
    @author zdw
     *
     
    */

    public class ConcreateDecorator1 extends Decorator
    {
        
    public ConcreateDecorator1(Component component)
        
    {
            
    super(component);
        }


        @Override
        
    public void functionA()
        
    {
            
    super.functionA();
            
    this.functionB();
        }

        
    //根據自己的需要擴展
        private void functionB()
        
    {
            System.out.println(
    "function B");
        }

    }


    具體裝飾者角色2:
    package com.pattern.decorator2;

    public class ConcreateDecorator extends Decorator
    {
        
    public ConcreateDecorator(Component component)
        
    {
            
    super(component);
        }


        @Override
        
    public void functionA()
        
    {
            
    super.functionA();
            
    this.functionC();
        }


        
    private void functionC()
        
    {
            System.out.println(
    "fucntion C");
        }

    }


    測試類:
    package com.pattern.decorator2;

    /**
     * 測試客戶端
     * 
     * 
    @author zdw
     * 
     
    */

    public class Client
    {

        
    /**
         * 
    @param args
         
    */

        
    public static void main(String[] args)
        
    {
            
    // 一層套一層,進行方法組合
            Component component = new ConcreateDecorator(new ConcreateDecorator1(
                    
    new ConcreateComponent()));
            component.functionA();
        }


    }

    OO原則:動態地將責任附加到對象上。想要擴展功能,裝飾者提供有別于繼承的另一種選擇。

    要點:
    1、繼承屬于擴展形式之一,但不見得是達到彈性設計的最佳方案。
    2、在我們的設計中,應該允許行為可以被擴展,而不須修改現有的代碼。
    3、組合和委托可用于在運行時動態地加上新的行為。
    4、除了繼承,裝飾者模式也可以讓我們擴展行為。
    5、裝飾者模式意味著一群裝飾者類,這些類用來包裝具體組件。
    6、裝飾者類反映出被裝飾的組件類型(實際上,他們具有相同的類型,都經過接口或繼承實現)。
    7、裝飾者可以在被裝飾者的行為前面與/或后面加上自己的行為,甚至將被裝飾者的行為整個取代掉,而達到特定的目的。
    8、你可以有無所數個裝飾者包裝一個組件。
    9、裝飾者一般對組建的客戶是透明的,除非客戶程序依賴于組件的具體類型。
    10、裝飾者會導致設計中出現許多的小對象,如果過度使用,會讓程序變得很復雜。



    posted on 2008-05-25 09:58 々上善若水々 閱讀(1255) 評論(0)  編輯  收藏 所屬分類: 設計模式

    主站蜘蛛池模板: 免费人成在线观看视频高潮| 最近中文字幕无吗免费高清 | 免费一级做a爰片性色毛片| 国产AV日韩A∨亚洲AV电影| 国产亚洲福利精品一区二区| 中文字幕人成人乱码亚洲电影| 亚洲综合精品第一页| 免费在线观看的黄色网址| 永久免费av无码入口国语片| 亚洲卡一卡二卡乱码新区| 久久亚洲国产成人影院网站| 免费黄色福利视频| a在线视频免费观看在线视频三区| 亚洲美女视频一区| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 成年人网站免费视频| 亚洲欧洲国产精品久久| 69视频在线观看免费| 无码色偷偷亚洲国内自拍| 国产亚洲精品免费| 日韩免费无码一区二区三区| 夜夜亚洲天天久久| 国产精品极品美女免费观看 | 国产三级免费观看| 永久免费在线观看视频| 一级做a爰片久久毛片免费陪| 亚洲一区二区三区高清视频| 精品国产免费一区二区| 免费无码毛片一区二区APP| 色吊丝性永久免费看码| 亚洲乱码在线卡一卡二卡新区| 亚洲AV无码国产精品麻豆天美 | 亚洲视频网站在线观看| 亚洲国产精品尤物YW在线观看| 一个人看的www在线观看免费| 免费看黄的成人APP| 羞羞视频在线观看免费| 亚洲sm另类一区二区三区| 亚洲乱人伦精品图片| 亚洲国产女人aaa毛片在线| 激情97综合亚洲色婷婷五|