日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

一文徹底搞明白組合模式

來源: 責編: 時間:2024-05-09 09:20:49 215觀看
導讀本篇講解Java設計模式中的組合模式,分為定義、模式應用前案例、結構、模式應用后案例、適用場景、模式可能存在的困惑和本質探討7個部分。定義組合模式是將對象組合成樹形結構以表示“部分-整體”的層次結構。組合模式

本篇講解Java設計模式中的組合模式,分為定義、模式應用前案例、結構、模式應用后案例、適用場景、模式可能存在的困惑和本質探討7個部分。LVO28資訊網——每日最新資訊28at.com

定義

組合模式是將對象組合成樹形結構以表示“部分-整體”的層次結構。組合模式使得客戶對單個對象和復合對象的使用具有一致性。LVO28資訊網——每日最新資訊28at.com

在新的分類方式中,組合模式被劃分至類之間的交互類別中,其簡化的是調用方與具備樹結構的一組對象之間的交互,具體通過一致性的行為實現LVO28資訊網——每日最新資訊28at.com

LVO28資訊網——每日最新資訊28at.com

模式應用前案例

下面以一個典型的文件和目錄為例來進行說明,先來看一下未應用組合模式之前的代碼實現。LVO28資訊網——每日最新資訊28at.com

public class File {//文件結構    private final String name;    public File(String name) {        this.name = name;    }    public void display() {        System.out.println("File: " + this.name);    }}public class Directory {//目錄結構    private String name;    private final List<File> files;    private final List<Directory> directories;    // 初始化方法    public Directory(String name){        this.name = this.name;        this.files = new ArrayList<>();        this.directories = new ArrayList<>();    }    // 添加子節點    public void addFile(File file){        this.files.add(file);    }    // 添加子目錄    public void addDirectory(Directory directory) {        this.directories.add(directory);    }    public void display(){        //System.out.println("Directory:"+this.name);        for(File file : this.files){            file.display();        }        for (Directory dir : this.directories) {            dir.display();        }    }}public class Client {//調用方代碼    public static void main(String[] ars){        Directory root= new Directory("Root");        File file1=new File("file1.txt");        File file2=new File("file2.txt");        root.addFile(file1);        root.addFile(file2);        Directory subDirecory =new Directory ("Subdirectory");        File file3 = new File("file3.tx");        File file4 = new File("file4.tx");        subDirecory.addFile(file3);        subDirecory.addFile(file4);        root.addDirectory(subDirecory);        root.display();    }}

我們知道,文件和目錄兩者是一個大的樹結構中的節點。在上面未使用組合模式的代碼中,文件和目錄都有自己定義的方法。這樣在構建一個多層樹結構的過程中,復雜度會提升。LVO28資訊網——每日最新資訊28at.com

結構

LVO28資訊網——每日最新資訊28at.com

組合模式的示例代碼如下。LVO28資訊網——每日最新資訊28at.com

public interface Component {    void operation();    void add(Component component);    void remove(Component component);    Component Display(int index);}public class Leaf implements Component{    private String name;    public Leaf(String name) {        this.name = name;    }    @Override    public void operation() {        System.out.println("Leaf: " + name + " operation()");    }    @Override    public void add(Component component) {        throw new UnsupportedOperationException("Leaf cannot have children");    }    @Override    public void remove(Component component) {        throw new UnsupportedOperationException("Leaf cannot remove children");    }    @Override    public Component Display(int index) {        throw new UnsupportedOperationException("Leaf cannot get child");    }}public interface Component {    void operation();    void add(Component component);    void remove(Component component);    Component Display(int index);}public class Client {    public static void main(String[] args) {        // 創建葉子節點        Component leaf1 = new Leaf("LeafA");        Component leaf2 = new Leaf("LeafB");        Component leaf3 = new Leaf("LeafC");        // 創建復合節點        Component composite = new Composite("CompositeX");        composite.add(leaf1);        composite.add(leaf2);        // 創建另一個復合節點,并添加之前的復合節點和新的葉子節點        Component root = new Composite("Root");        root.add(composite);        root.add(leaf3);        // 執行操作        root.operation();    }}

模式應用后案例

上面文件與目錄的案例,使用組合模式之后的代碼實現如下。LVO28資訊網——每日最新資訊28at.com

public interface IComponent {//接口    void display();}public class File implements IComponent{//文件實現    private final String name;    public File(String name) {        this.name = name;    }    @Override    public void display() {        System.out.println("File: " + this.name);    }}public class Directory implements IComponent{//目錄實現    private String name;    private final List<IComponent> children;    // 初始化方法    public Directory(String name){        this.name = this.name;        this.children = new ArrayList<>();    }    // 添加子節點    public void addComponent(IComponent component){        this.children.add(component);    }    // 顯示目錄內容    @Override    public void display() {       //System.out.println("Directory: " + this.name);        for (IComponent child : this.children) {            child.display();        }    }}public class Client {//調用方代碼    public static void main(String[] ars){        Directory root= new Directory("Root");        File file1 = new File("file1.txt");        File file2 = new File ("file2.txt");        root.addComponent(file1);        root.addComponent(file2);        Directory subDirectory =new Directory ("Subdirectory");        File file3 = new File("file3.txt");        File file4 = new File("file4.txt");        subDirectory.addComponent(file3);        subDirectory.addComponent(file4);        root.addComponent(subDirectory);        root.display();    }}

在上述代碼中,由于樹的結構使用一個接口和實現的家族來實現,這樣樹的結構中所有類的行為都是一致的,簡化了編碼時的復雜度。LVO28資訊網——每日最新資訊28at.com

適用場景

當需求中出現的一系列概念或對象,它們之間存在部分-整體的層次結構或共同構成一顆樹的結構時,就可以考慮使用組合模式。LVO28資訊網——每日最新資訊28at.com

模式可能存在的困惑

困惑1:組合模式中的“組合”,與“組合優于繼承”中的“組合”,有什么關聯?LVO28資訊網——每日最新資訊28at.com

兩者都代表了一種關系。前者的“組合”指的是將一系列對象按照層次化結構進行組織。而后者的“組合”指的是兩個對象之間的聚合或組合關系,以此來取代類之間繼承關系。LVO28資訊網——每日最新資訊28at.com

本質

組合模式的本質在于提供了一種機制來處理對象之間的部分-整體關系,并且通過統一接口來簡化調用方使用復雜層次結構時可能遇到的問題。LVO28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-87479-0.html一文徹底搞明白組合模式

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 大營銷抽獎系統,DDD開發要如何建模?

下一篇: 開發者對 React 19 Beta 發布感到困惑

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
亚洲最快最全在线视频| 激情六月婷婷久久| 欧美日韩色婷婷| 欧美系列精品| 国产亚洲福利社区一区| 亚洲大胆av| 99精品国产在热久久婷婷| 午夜精品免费在线| 麻豆91精品| 国产精品久久久久999| 国产亚洲一区二区在线观看| 亚洲人成77777在线观看网| 亚洲一区亚洲| 久久综合99re88久久爱| 欧美性猛交xxxx乱大交退制版| 国产综合久久| 日韩午夜高潮| 久久精品男女| 欧美日韩裸体免费视频| 韩日在线一区| 亚洲性av在线| 欧美成人午夜激情在线| 国产精品露脸自拍| 最新国产の精品合集bt伙计| 欧美诱惑福利视频| 欧美日韩天堂| 在线观看国产精品淫| 亚洲欧美日韩另类精品一区二区三区| 免费成人av在线看| 国产农村妇女精品一区二区| 久久亚洲影音av资源网| 国产精品久久久久久久久久妞妞| 在线电影国产精品| 亚洲欧美另类在线观看| 欧美激情亚洲国产| 国产综合久久久久影院| 亚洲主播在线观看| 欧美精品xxxxbbbb| 在线播放国产一区中文字幕剧情欧美| 亚洲欧美日韩国产| 欧美日韩一区在线播放| 亚洲国产乱码最新视频| 久久久青草青青国产亚洲免观| 国产精品扒开腿做爽爽爽软件| 亚洲高清一二三区| 久久精品99国产精品| 国产精品日韩久久久久| 99re6热只有精品免费观看 | 亚洲视频国产视频| 欧美不卡在线视频| 狠狠色狠色综合曰曰| 性娇小13――14欧美| 欧美日韩三级| 亚洲久色影视| 免费成人美女女| 国外成人在线| 欧美在线视频一区二区三区| 国产精品久久久久久影院8一贰佰| 亚洲免费观看高清在线观看| 免费在线亚洲欧美| 黄网站免费久久| 欧美在线一二三| 国产欧美日韩专区发布| 午夜精品成人在线| 国产精品免费一区二区三区在线观看| 夜夜嗨av一区二区三区| 欧美日韩精品免费观看视频完整| 91久久精品国产91性色| 男人插女人欧美| 在线观看福利一区| 久久婷婷国产综合国色天香| 狠狠综合久久av一区二区小说| 欧美在线视频观看| 国产性天天综合网| 久久激情一区| 禁断一区二区三区在线| 噜噜噜噜噜久久久久久91 | 亚洲欧美激情一区二区| 国产精品国产三级欧美二区| 亚洲一级在线观看| 国产精品视频yy9299一区| 亚洲免费在线观看视频| 国产九九精品| 久久国产一区| 激情成人综合| 免费在线成人av| 亚洲美女视频在线观看| 欧美日韩免费高清一区色橹橹| 这里只有视频精品| 国产精品日韩精品欧美在线| 欧美中文在线免费| 伊人久久男人天堂| 你懂的视频欧美| 亚洲毛片在线观看.| 欧美日韩亚洲视频一区| 亚洲一区二区三区精品动漫| 国产精品资源| 久久久久久久久久码影片| 亚洲第一在线综合在线| 欧美日韩国产高清视频| 亚洲欧美国产视频| 红桃av永久久久| 欧美极品在线播放| 这里只有精品视频| 国产一区二区三区四区hd| 免费日韩av| 99精品99| 国产欧美日韩一区二区三区| 久久一区中文字幕| 亚洲免费观看高清在线观看 | 欧美视频精品在线观看| 亚洲欧美日韩高清| 国内外成人免费激情在线视频| 久久婷婷一区| 日韩亚洲欧美中文三级| 国产精品欧美日韩一区| 久久深夜福利免费观看| 日韩午夜在线电影| 国产欧美一区二区白浆黑人| 久久一区激情| 亚洲一区欧美激情| 在线播放日韩专区| 欧美日韩综合精品| 久久久久久久综合狠狠综合| 日韩一二三在线视频播| 国产一区二区精品久久| 欧美理论电影在线播放| 欧美在线播放一区| 日韩视频免费观看高清在线视频| 国产日本欧美在线观看 | 国产精品国产三级国产aⅴ无密码| 欧美有码在线观看视频| 亚洲精品日韩久久| 国产情人节一区| 欧美精品一卡| 久久国产精品久久久久久电车| 亚洲精品乱码| 国产午夜精品一区二区三区欧美| 欧美激情一区二区三区蜜桃视频| 性欧美大战久久久久久久免费观看 | 欧美精品18| 国产精品二区二区三区| 欧美视频国产精品| 亚洲国产成人精品久久久国产成人一区| 艳女tv在线观看国产一区| 欧美一区二区三区在| 欧美在线亚洲| 国产伦精品一区二区三区照片91| 99riav国产精品| 午夜精品美女久久久久av福利| 国产精品你懂的| 午夜精品亚洲一区二区三区嫩草| 在线成人黄色| 国产日韩欧美黄色| 欧美另类一区| 久久久午夜视频| 亚洲一级黄色片| 亚洲精品永久免费| 欧美另类videos死尸| 在线观看国产精品网站| 欧美专区日韩专区| 亚洲美女在线观看| 一本色道久久综合狠狠躁篇怎么玩| 欧美午夜精品理论片a级大开眼界| 精品动漫3d一区二区三区免费| 亚洲欧美日韩另类精品一区二区三区| 国产精品九九| 亚洲欧美中文在线视频| 国产一区二区三区四区三区四| 两个人的视频www国产精品| 狠狠色2019综合网| 午夜精品久久久久久久99黑人| 欧美区日韩区| 亚洲第一网站| 欧美色精品天天在线观看视频| 久久夜色精品国产| 午夜亚洲激情| 亚洲开发第一视频在线播放| 在线观看国产欧美| 国产精品一二一区| 欧美日韩a区| 欧美成人国产一区二区| 久热成人在线视频| 在线日韩日本国产亚洲| 久久尤物视频| 一区二区亚洲| 国产视频丨精品|在线观看| 欧美视频一二三区| 欧美精品久久久久久久免费观看| 久久久久久久高潮| 久久精品一区二区三区不卡| 欧美一级片久久久久久久| 亚洲一区久久久| 在线一区欧美| 亚洲婷婷综合久久一本伊一区| 一区二区三区国产在线观看| 日韩视频中午一区| 亚洲精品一二三区| 亚洲精品国产品国语在线app| 亚洲国产一区二区三区a毛片| 亚洲国产高清一区| 亚洲激情电影在线| 亚洲精品久久久久久久久久久| 91久久精品国产|