欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

組合模式

系統 1680 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條評論
主站蜘蛛池模板: 色综合天天综合网国产成人网 | 伊人精品国产 | 日韩精品亚洲专区在线电影不卡 | 男女啪啦猛视频免费 | 亚洲美女天堂网 | 一级片在线播放 | 超碰在线国产 | 日日操夜夜草 | 亚洲欧美自拍另类图片色 | 欧美电影网站在线观看影片 | 色视频网站在线观看 | 亚洲综合影院 | 亚洲视频一区在线 | 国产色司机在线视频免费观看 | 国产精品午夜电影 | 国产精品区二区三区日本 | 伊人艹 | 欧美一级视频 | 奇米影视小说 | 国产高清一区二区 | 久久99成人| 国产99视频在线 | 欧美另类色 | 欧美视频性 | 91精品国产闺蜜国产在线 | jiucao视频在线观看 | 久久亚洲一级毛片 | 国产苐1页影院草草影院 | 美女污污视频网站 | 91精品天美精东蜜桃传媒入口 | 国产精品人妻无码免费久久一 | 色网站综合 | 亚洲欧美一区二区三区另类 | 亚洲综合在线另类色区奇米 | 啪一啪在线视频 | 狠狠草视频 | 欧美18videosex性欧美群 | 玖玖精品在线观看 | av中文字幕在线观看 | 国产精品亚洲精品不卡 | 日本高清免费不卡毛片 |