亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

組合模式

系統 1826 0
組合模式(Composite Pattern)有時候又叫做部分-整體模式,它使我們樹型結構的問題中,模糊了簡單元素和復雜元素的概念,客戶程序可以向處理簡單元素一樣來處理復雜元素,從而使得客戶程序與復雜元素的內部結構解耦。
組合模式讓你可以優化處理遞歸或分級數據結構。有許多關于分級數據結構的例子,使得組合模式非常有用武之地。關于分級數據結構的一個普遍性的例子是你每次使用電腦時所遇到的:文件系統。文件系統由目錄和文件組成。每個目錄都可以裝內容。目錄的內容可以是文件,也可以是目錄。按照這種方式,計算機的文件系統就是以遞歸結構來組織的。如果你想要描述這樣的數據結構,那么你可以使用組合模式Composite。
1抽象構件角色Component:它為組合中的對象聲明接口,也可以為共有接口實現缺省行為。

2樹葉構件角色Leaf:在組合中表示葉節點對象——沒有子節點,實現抽象構件角色聲明的接口。

3樹枝構件角色Composite:在組合中表示分支節點對象——有子節點,實現抽象構件角色聲明的接口;存儲子部件。〕
組合模式
組合模式的優點有哪些呢?第一個優點只要是樹形結構,就要考慮使用組合模式,這個一定記住,只
要是要體現局部和整體的關系的時候,而且這種關系還可能比較深,考慮一下組合模式吧。
component:
    
package pattern.composite;

public abstract class Component {
	String name;
	String department;
	String salary;
	Component parent;

	public Component(String name, String department, String salary) {
		this.name = name;
		this.department = department;
		this.salary = salary;
	}

	public String getInfo() {
		StringBuffer sb = new StringBuffer();
		sb.append(name).append(" " + department).append(" " + salary);
		return sb.toString();
	}

	public void setParent(Component parent) {
		this.parent = parent;
	}

	public Component getParent() {
		return parent;
	}
}


  


leaf:
    
public class Leaf extends Component{

	public Leaf(String name, String department, String salary) {
		super(name, department, salary);
		// TODO Auto-generated constructor stub
	}

}


  

composite:
    
package pattern.composite;

import java.util.ArrayList;
import java.util.List;

public class Composite extends Component {
	List<Component> subList = new ArrayList<Component>();


	public Composite(String name, String department, String salary) {
		super(name, department, salary);
	}

	public void addSub(Component component) {
		component.setParent(this);
		this.subList.add(component);
	}

	public List<Component>  getSub() {
		return this.subList;
	}

}

  

Test:
    
package pattern.composite;

import java.util.ArrayList;
import java.util.List;

public class Composite extends Component {
	List<Component> subList = new ArrayList<Component>();


	public Composite(String name, String department, String salary) {
		super(name, department, salary);
	}

	public void addSub(Component component) {
		component.setParent(this);
		this.subList.add(component);
	}

	public List<Component>  getSub() {
		return this.subList;
	}

}


  

合成模式的實現根據所實現接口的區別分為兩種形式,分別稱為安全式和透明式。雖然這是模式的實現問題,但是由于它影響到模式結構的細節
?? 合成模式可以不提供對服對象的管理方法,但是合成模式必須在合適的地方提供子對象的管理方法。
??
?? 1)透明方式
?? 作為第一種選擇,在Compotent里面聲明所有的用來管理子類對象的方法,包括add()、remove()、以及getChild()方法。
?? 這樣做的好處是所有的構件類都有相同的接口。在客戶端看來,樹葉類對象與合成類對象的區別起碼在接口層次上消失了,客戶端
?? 可以同等地對待所有的對象。這就是透明形式的合成模式。
??
?? 這個選擇的缺點是不夠安全,因為樹葉對象和組合類對象的在本質上是有區別的。樹葉類對象不可能有下一個層次的對象,
?? 因此add() remove() getChild()方法沒有意義,但是在編譯時期不會出錯,而只會在運行期出錯。
??
?? 2)安全方式
?? 第二種選擇是在Composite類里而聲明所有的用來管理子類對象的方法。這樣的做法是安全的做法。
?? 因為樹葉類型的對象根本就沒有管理子類對象的方法,因此,如果客戶端對樹葉類對象使用這些方法時,程序會在編譯時期出錯。
?? 編譯通不過,就不會出現運行時期錯誤

這個方式的缺點就是不夠透明,因為樹葉類和合成類將具有不同的接口。

組合模式


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 精品免费视在线观看 | 4虎永免费最新永久免费地址 | 国产美女做爰免费视 | 国产区精品福利在线观看精品 | 亚洲国产高清一区二区三区 | 九九视频九九热 | 天天舔夜夜操 | 久久99精品久久久久久综合 | 黄色男人的天堂 | 日韩毛片在线影视 | 欧美毛片aaaaa片久久久久 | 欧洲成人免费视频 | 亚洲 自拍 另类 制服在线 | 久久www免费人成_看片美女图 | 国产激情久久久久影院小草 | 国产日本久久久久久久久婷婷 | 欧美88| 操操操日日 | 91视频a| 青青操在线观看 | 激情都市久久爱 | 亚洲国产成人久久77 | 中文字幕人成乱码第一页 | 最猛黑人xxxⅹ黑人猛交 | 欧美成人精品高清在线观看 | 成人午夜在线观看 | 亚洲性综合 | 玖玖国产在线观看 | 国产精品久久久影院 | 久久是免费只精品热在线 | 四虎影院永久免费观看 | 国产欧美日韩图片一区二区 | 奇米第四色在线视频 | 国产精品国产亚洲精品看不卡 | 国产在线精品一区二区中文 | 婷婷综合久久中文字幕 | 亚洲成人看片 | 国产99在线播放免费 | 一级一片免费看 | 欧美日韩国产在线成人网 | 亚洲美女亚洲精品久久久久 |