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

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

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

    城市獵人

    在一網情深的日子里,誰能說得清是苦是甜,只知道確定了就義無反顧
    posts - 1, comments - 7, trackbacks - 0, articles - 89

    模式(三):裝飾者(decorator)模式

    Posted on 2008-07-21 12:15 sailor 閱讀(179) 評論(0)  編輯  收藏 所屬分類: 模式
    1、定義
        動態地將責任附加到對象上。若要擴展功能,裝飾著提供了比繼承者更有彈性的替代方案。

    2、原則
        為交互對象之間的耦合設計而努力
        對擴展開放,對修改關閉

    3、適用環境
        在不影響其他對象的情況下,以動態、透明的方式給單個對象添加職責。
        處理那些可以撤消的職責。
        當不能采用生成子類的方法進行擴充時。一種情況是,可能有大量獨立的擴展,為支持每一種組合將產生大量的子類,使得子類數目呈爆炸性增長。另一種情況可能是因為類定義被隱藏,或類定義不能用于生成子類。

    4、本模式中的角色

        抽象構件(Component):給出一個抽象接口,以規范準備接收附加責任的對象。
        具體構件(Concrete Component):定義一個接收到附加責任的類。
        裝飾(Decorator):持有一個構件對象的實例,并定義與抽象構件一致的接口。
        具體裝飾(Concrete Decorator):負責給構件對象貼上附加的責任。

    Decorator.jpg(圖例)


    具體例子:
    先定義抽象構件:
    package decorator;
    //抽象構件接口
    public interface Component{
        
    public void sampleOperation();
    }

    一個具體構件----門:
    package decorator;
    //具體構件-----門
    public class  Door implements Component{
        
    //實現方法
        public void sampleOperation(){
            System.out.println(
    "build a door");
        }

    }

    裝飾(抽象類):
    package decorator;

    public abstract class Decorator implements Component{
        
    //持有一個構件對象的實例
        private Component component;
        
    //構造方法
        public Decorator(Component component){
            
    this.component=component;
        }

        
    //方法的具體實現
        public  void sampleOperation(){
            component.sampleOperation();
        }

    }

    具體裝飾:
    package decorator;
    //具體裝飾----把手
    public class Knob extends Decorator{

        
    public Knob(Component component){
            
    super(component);
        }

        
        
    public void sampleOperation(){
            
    super.sampleOperation();
            
    //附加的"責任"
            System.out.println("add a knob");
        }

    }
    package decorator;
    //具體裝飾----鎖
    public class Lock extends Decorator{

        
    public Lock(Component component){
            
    super(component);
        }

        
    public void sampleOperation(){
            
    super.sampleOperation();
            
    //附加"責任"
            System.out.println("add a lock");
        }

    }
    運行類:
    package decorator;

    public class DecoratorPattern{
        
    public static void main(String[] args){
            Component door
    =new Door();
            Component lock
    =new Lock(door);
            Component knob
    =new Knob(lock);
            knob.sampleOperation();
        }

    }

    運行結果:
    build a door
    add a lock
    add a knob
    Press any key to continue...

    參考資料:《Head First 設計模式》
                        設計模式學習筆記(十)--------裝飾(Decorator)模式
    主站蜘蛛池模板: 最新国产精品亚洲| 中文字幕中韩乱码亚洲大片| 亚洲免费视频在线观看| 国产精品无码免费专区午夜| 亚洲国产一区二区视频网站| 水蜜桃视频在线观看免费| 亚洲Av无码乱码在线播放| 国产亚洲精品美女久久久久| 一区国严二区亚洲三区| 日韩精品无码免费视频| 亚洲中文字幕在线第六区| 中国videos性高清免费| 亚洲午夜久久久精品影院| 91九色视频无限观看免费| 国产精品1024在线永久免费| 亚洲中文字幕视频国产| baoyu116.永久免费视频| 在线看片人成视频免费无遮挡| 亚洲午夜在线播放| 国产精品高清全国免费观看| 在线播放免费人成视频网站| 亚洲精品无码成人AAA片| 91高清免费国产自产| 亚洲av色香蕉一区二区三区蜜桃| 亚洲国产高清精品线久久| 182tv免费视频在线观看| 亚洲国产精品成人精品小说| 真实乱视频国产免费观看| 国产免费人成视频在线播放播| 亚洲a一级免费视频| 成人毛片免费观看| 国产特黄一级一片免费| 亚洲精品动漫在线| 国产成人青青热久免费精品| a级毛片免费播放| 亚洲AV男人的天堂在线观看| 永久亚洲成a人片777777| 日本黄网站动漫视频免费| 成年大片免费视频播放一级| 老司机亚洲精品影院| 波多野结衣中文一区二区免费|