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

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

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

    posts - 167,  comments - 30,  trackbacks - 0
    假設您今天要開發一個動畫編輯程式,動畫由影格(Frame)組成,數個影格組合為動畫清單,動畫清單也可以由其它已完成的動畫清單組成,也可以在動畫清單與清單之間加入個別影格。無論是影格或動畫清單都可以播放,而動畫清單負責的就是組合影格或動畫清單,所以可以這么設計:




    對于Frame而言,Playlist是一個容器,然而Playlist也實作Playable,所以它也可以播放,您可以進一步地將Playlist組合至另一個Playlist中,以形成更長的播放清單。以Java實現的話。
    以Java實現的話。
    import java.util.*;

    interface Playable {
    void play();
    }

    class Frame implements Playable {
    private String image;
    Frame(String image) {
    this.image = image;
    }
    public void play() {
    System.out.println("播放 " + image);
    }
    }

    class Playlist implements Playable {
    private List<Playable> list = new ArrayList<Playable>();
    public void add(Playable playable) {
    list.add(playable);
    }
    public void play() {
    for(Playable playable : list) {
    playable.play();
    }
    }
    }

    public class Main {
    public static void main(String[] args) {
    Frame logo = new Frame("片頭 LOGO");

    Playlist playlist1 = new Playlist();
    playlist1.add(new Frame("Duke 左揮手"));
    playlist1.add(new Frame("Duke 右揮手"));

    Playlist playlist2 = new Playlist();
    playlist2.add(new Frame("Duke 走左腳"));
    playlist2.add(new Frame("Duke 走右腳"));

    Playlist all = new Playlist();
    all.add(logo);
    all.add(playlist1);
    all.add(playlist2);

    all.play();
    }
    }

    以Python實現的話:
    class Frame:
    def __init__(self, image):
    self.image = image
    def play(self):
    print("播放 " + self.image)

    class Playlist:
    def __init__(self):
    self.list = []
    def add(self, playable):
    self.list.append(playable);
    def play(self):
    for playable in self.list:
    playable.play()

    logo = Frame("片頭 LOGO")

    playlist1 = Playlist()
    playlist1.add(Frame("Duke 左揮手"))
    playlist1.add(Frame("Duke 右揮手"))

    playlist2 = Playlist()
    playlist2.add(Frame("Duke 走左腳"))
    playlist2.add(Frame("Duke 走右腳"))

    all = Playlist()
    all.add(logo)
    all.add(playlist1)
    all.add(playlist2)

    all.play();以UML來表示Composite模式的結構:



    具有層次性或組合性的物件可以使用Composite模式,像是電路元件、視窗元件等,使用Composite模式可以大大減低這些元件設計的復雜度,以Java標準API中AWT視窗元件為例,
    Component上有個paint()方法,可以進行元件的繪制,Container可以容納Component(如Button、Label等),而Container繼承Component,所以Container也可以容納Container,這也是Composite模式的實際例子:
     

    from : http://caterpillar.onlyfun.net/Gossip/index.html 



    posted on 2012-10-12 16:20 David1228 閱讀(332) 評論(0)  編輯  收藏 所屬分類: JAVA線程-模式-設計

    <2012年10月>
    30123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    常用鏈接

    留言簿(4)

    隨筆分類

    隨筆檔案

    文章檔案

    新聞分類

    新聞檔案

    相冊

    收藏夾

    Java

    Linux知識相關

    Spring相關

    云計算/Linux/虛擬化技術/

    友情博客

    多線程并發編程

    開源技術

    持久層技術相關

    搜索

    •  

    積分與排名

    • 積分 - 358627
    • 排名 - 154

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 精品女同一区二区三区免费播放| 亚洲婷婷第一狠人综合精品| 国产AV无码专区亚洲AV蜜芽| 成人免费毛片内射美女-百度| 最近2019免费中文字幕视频三| 亚洲欧洲成人精品香蕉网| 国产免费AV片在线观看播放| 国产一卡二卡≡卡四卡免费乱码 | 亚洲av不卡一区二区三区| a毛片免费在线观看| 亚洲精品无码永久在线观看你懂的| 一级a性色生活片久久无少妇一级婬片免费放 | 亚洲日本一区二区三区在线| 成人免费av一区二区三区| 亚洲中文字幕无码久久精品1| 91成人免费观看在线观看| 亚洲AV日韩AV天堂一区二区三区| 日韩免费电影网址| 亚洲国产成人精品久久| 视频一区在线免费观看| 青娱分类视频精品免费2| 伊人久久综在合线亚洲91| 国内精品免费久久影院| 亚洲综合激情另类小说区| 特级做A爰片毛片免费69| 国产亚洲精品美女2020久久| 亚洲日韩在线观看| 国产亚洲美女精品久久久久| 中文字幕精品亚洲无线码一区| 很黄很污的网站免费| 亚洲看片无码在线视频| 国产一级高清视频免费看| 成在线人视频免费视频| 91亚洲国产在人线播放午夜| 暖暖免费高清日本一区二区三区| 亚洲国产福利精品一区二区| 国产一区二区三区无码免费| 免费在线黄色电影| 亚洲日韩国产一区二区三区在线| 亚洲精品综合久久| 精品久久8x国产免费观看|