<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

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产亚洲精午夜久久久久久| 又粗又大又猛又爽免费视频| 免费人成在线观看播放国产| 国产在线国偷精品产拍免费| 免费一级国产生活片| 国产亚洲精品精品国产亚洲综合| 亚洲精品少妇30p| 国产成人精品亚洲2020| 一个人看的免费高清视频日本| 国产亚洲漂亮白嫩美女在线| 久久久久国色av免费看| 免费A级毛片无码A| 亚洲精选在线观看| 三级片免费观看久久| 在线免费观看一区二区三区| 水蜜桃亚洲一二三四在线| 亚洲欧洲日产韩国在线| 免费看无码特级毛片| 亚洲av无码不卡私人影院| 亚洲av中文无码乱人伦在线播放 | 国产成人精品日本亚洲专区61| 亚洲人成人网站在线观看| 自拍日韩亚洲一区在线| 免费国产午夜高清在线视频| 一级毛片直播亚洲| youjizz亚洲| 亚洲视频在线免费看| 免费看韩国黄a片在线观看| 亚洲国产精品无码第一区二区三区| 午夜亚洲国产精品福利| 日韩欧毛片免费视频| 亚洲精品无码不卡| 免费观看成人毛片a片2008| 羞羞视频免费网站入口| 永久免费av无码网站大全| 亚洲一级毛片在线播放| 日本视频免费高清一本18| 青草草在线视频永久免费| 亚洲精品在线播放视频| 99ee6热久久免费精品6| 国产乱弄免费视频|