<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/虛擬化技術/

    友情博客

    多線程并發編程

    開源技術

    持久層技術相關

    搜索

    •  

    積分與排名

    • 積分 - 358616
    • 排名 - 154

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲啪啪免费视频| a级毛片免费全部播放| 国产成人精品免费视频大全麻豆| 激情综合色五月丁香六月亚洲| 午夜在线免费视频| 亚洲AV日韩精品一区二区三区| 曰批全过程免费视频观看免费软件| 四虎成人精品在永久免费| 国产精品日本亚洲777| 国产区卡一卡二卡三乱码免费| 亚洲AV噜噜一区二区三区| 日本特黄a级高清免费大片| 久久亚洲中文字幕无码| 免费观看四虎精品国产永久| 四虎影视在线看免费观看| 国产亚洲成人久久| 99爱视频99爱在线观看免费| 亚洲无限乱码一二三四区| 免费观看成人毛片a片2008| 亚洲欧美日韩中文无线码| 免费少妇a级毛片人成网| 国产大片免费天天看| 亚洲福利在线视频| 99精品国产免费久久久久久下载| 2020年亚洲天天爽天天噜| 国产精品另类激情久久久免费 | 亚洲一级毛片在线观| 好大好硬好爽免费视频| 日日狠狠久久偷偷色综合免费| 亚洲日韩国产精品第一页一区| 免费无码中文字幕A级毛片| 亚洲午夜在线一区| 国产免费av一区二区三区| 国产一级a毛一级a看免费人娇| 91午夜精品亚洲一区二区三区| 永久免费视频v片www| 久久国产精品免费观看| 亚洲日本在线电影| 国产成人A人亚洲精品无码| 西西大胆无码视频免费| 9久热精品免费观看视频|