<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)  編輯  收藏 所屬分類: 設計模式

    主站蜘蛛池模板: 亚洲av日韩精品久久久久久a| 亚洲啪啪免费视频| 最近的中文字幕大全免费版| 亚洲综合一区二区精品导航| 免费一级不卡毛片| 久久久久亚洲精品成人网小说| 三上悠亚电影全集免费 | 久久精品国产99精品国产亚洲性色| 日本免费精品一区二区三区| 亚洲乱码国产一区网址| 两性色午夜视频免费网| 亚洲国产精品无码久久久不卡| 国产成人免费视频| 亚洲videos| 日韩高清在线免费观看| 一级特黄特色的免费大片视频| 伊人久久精品亚洲午夜| 午夜免费福利片观看| 亚洲欧洲国产经精品香蕉网| 国产精品美女午夜爽爽爽免费| 亚洲av无码专区在线观看下载 | 自拍偷自拍亚洲精品情侣| 免费精品99久久国产综合精品| 久久综合亚洲鲁鲁五月天| 亚洲中文无码永久免费| 精品在线视频免费| 国产亚洲av片在线观看播放 | 亚洲精品免费在线观看| 亚洲国产精品综合一区在线| 免费无码不卡视频在线观看| 一个人看的免费视频www在线高清动漫 | 亚洲国产精品一区| 免费毛片在线播放| a级在线观看免费| 亚洲a视频在线观看| 亚洲午夜无码AV毛片久久| 91视频免费网址| 日本免费精品一区二区三区| 中文字幕亚洲综合久久2| 免费在线观看你懂的| 999任你躁在线精品免费不卡|