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

組合模式

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

2樹葉構(gòu)件角色Leaf:在組合中表示葉節(jié)點對象——沒有子節(jié)點,實現(xiàn)抽象構(gòu)件角色聲明的接口。

3樹枝構(gòu)件角色Composite:在組合中表示分支節(jié)點對象——有子節(jié)點,實現(xiàn)抽象構(gòu)件角色聲明的接口;存儲子部件。〕
組合模式
組合模式的優(yōu)點有哪些呢?第一個優(yōu)點只要是樹形結(jié)構(gòu),就要考慮使用組合模式,這個一定記住,只
要是要體現(xiàn)局部和整體的關(guān)系的時候,而且這種關(guān)系還可能比較深,考慮一下組合模式吧。
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;
	}

}


  

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

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

組合模式


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 91精品免费观看老司机 | 宅男看片午夜大片啪啪mv | 免费一级毛片不卡在线播放 | 欧美另类黑人巨大videos | 日本一级毛片片免费观看 | 久久亚洲免费视频 | 美女被爆羞羞视频网站视频 | 亚洲一区二区久久 | 国产91av视频 | 伊人焦久影院 | 免费的性生活视频 | 久久精品亚瑟全部免费观看 | 国产日产精品_国产精品毛片 | 91人碰| 久草在线在线精品观看 | 亚洲精品综合一区二区三区 | 国内精品久久久久不卡 | 在线欧美一级毛片免费观看 | 男人草女人的视频 | 国内精品久久久久影院网站 | a毛片免费在线观看 | 日韩欧美久久一区二区 | 久久伊伊香蕉综合精品 | 亚洲性生活 | 国产成人精品午夜在线播放 | 国产精品九九热 | 久久精品国产久精国产80cm | 国产特黄一级毛片特黄 | 一本色道久久综合亚洲精品 | 色综合久久亚洲国产日韩 | 亚洲视频精品在线观看 | 欧美一级毛片特黄黄 | 99久久久久国产精品免费 | 久久国产精品一区 | 国产精品日韩在线观看 | 午夜色视频 | 狠狠色欧美亚洲狠狠色五 | 一本一本久久a久久精品综合麻豆 | 久久久久亚洲精品影视 | 99久久精品一区二区三区 | 欧美 日韩 中字 国产 |