<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 閱讀(339) 評論(0)  編輯  收藏 所屬分類: JAVA線程-模式-設計

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

    常用鏈接

    留言簿(4)

    隨筆分類

    隨筆檔案

    文章檔案

    新聞分類

    新聞檔案

    相冊

    收藏夾

    Java

    Linux知識相關

    Spring相關

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

    友情博客

    多線程并發編程

    開源技術

    持久層技術相關

    搜索

    •  

    積分與排名

    • 積分 - 359724
    • 排名 - 154

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲电影一区二区三区| 亚洲精品网站在线观看不卡无广告| 亚洲色婷婷综合久久| 永久免费无码网站在线观看个| 国产成人一区二区三区免费视频| 亚洲色成人网站WWW永久四虎 | 亚洲av无码成人精品区一本二本| 无码一区二区三区AV免费| 亚洲黄页网在线观看| 日本免费人成视频播放| 亚洲6080yy久久无码产自国产| 成人黄页网站免费观看大全 | 免费高清A级毛片在线播放| 亚洲а∨天堂久久精品| 一级毛片a免费播放王色| 亚洲综合色婷婷七月丁香| 久久国产精品免费观看| 亚洲精品永久在线观看| 成人免费无码大片A毛片抽搐| 亚洲成AV人片在WWW| 亚洲成av人片一区二区三区| 一个人免费观看www视频| 亚洲av中文无码乱人伦在线r▽ | 在线观看免费视频一区| 亚洲国产一区二区三区青草影视| 最近免费中文字幕大全免费| 亚洲制服在线观看| 国产乱色精品成人免费视频 | 久久免费视频99| 亚洲无mate20pro麻豆| 国产男女猛烈无遮挡免费网站| 久青草国产免费观看| 亚洲AV成人片色在线观看 | 一级做α爱过程免费视频| 亚洲av中文无码乱人伦在线播放| 一级女人18毛片免费| 特级aaaaaaaaa毛片免费视频| 亚洲AV无码第一区二区三区| 最近的中文字幕大全免费版| 久久九九免费高清视频| 亚洲婷婷综合色高清在线|