今天就跟大家聊聊有關在JAVA項目中組合模式的實現(xiàn)原理是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據(jù)這篇文章可以有所收獲。
我們提供的服務有:成都網(wǎng)站建設、做網(wǎng)站、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、臨翔ssl等。為上1000+企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的臨翔網(wǎng)站制作公司
組合模式:將不同但是相關的對象組合成樹形結構以實現(xiàn)“部分-整體”的層次結構,使得用戶對單個對象和組合對象的使用具有一致性。
* 模式角色組成:
1.Component對象: 是組合中的對象接口,是所有類共有的接口。是用于統(tǒng)一定義整體中的部分。
2.Leaf對象: 整體中的部分,沒有下一級。
3.Composite對象: 用來存儲子部件,在Component接口中實現(xiàn)與部分有關操作。
以公司構成為例,比如公司有總公司,總公司下有分公司,分公司下有辦事處等。構成一個樹形結構。
/** * 抽象類:用來管理子類 * @description: * @date 2016-1-22 下午1:16:25 */ public abstract class Firm { private String firmName;// 公司名稱 public Firm(String firmName) { this.firmName = firmName; } public String getFirmName() { return firmName; } public void setFirmName(String name) { this.firmName = name; } protected abstract void append(Firm firm);// 添加公司如:新增分公司 protected abstract void romove(Firm firm);// 刪除公司:如因故關閉分公司 protected abstract void show(int level);//顯示公司所在的層級:總公司,分公司,辦事處等 }
/** * 分公司對象 * @description: * @date 2016-1-22 下午1:25:43 */ public class BranchFirm extends Firm { private ListcList; public BranchFirm(String name) { super(name); cList = new ArrayList (); } @Override protected void append(Firm firm) { cList.add(firm); } @Override protected void show(int depth) { StringBuilder sb = new StringBuilder(""); for (int i = 0; i < depth; i++) { sb.append("*"); } System.out.println(new String(sb) + this.getFirmName()); for (Firm c : cList) { c.show(depth + 2); } } @Override protected void romove(Firm firm) { // TODO Auto-generated method stub cList.remove(firm); } }
/** * Leaf結點類:公司市場部 * @description: * @date 2016-1-22 下午1:46:02 */ public class MarketDepartment extends Firm { public MarketDepartment(String name) { super(name); } @Override protected void append(Firm company) { } @Override protected void show(int depth) { // TODO Auto-generated method stub StringBuilder sb = new StringBuilder(""); for (int i = 0; i < depth; i++) { sb.append("*"); } System.out.println(new String(sb) + this.getFirmName()); } @Override protected void romove(Firm company) { } }
/** * Leaf結點類:公司技術部 * @description: * @date 2016-1-22 下午1:21:41 */ public class MinTechDepartment extends Firm { public MinTechDepartment(String name) { super(name); } @Override protected void append(Firm firm) { } @Override protected void show(int depth) { StringBuilder sb = new StringBuilder(""); for (int i = 0; i < depth; i++) { sb.append("*"); } System.out.println(new String(sb) + this.getFirmName()); } @Override protected void romove(Firm company) { } }
public class Test { public static void main(String[] args) { // TODO Auto-generated method stub Firm head = new BranchFirm("深圳XX集團有限公司");// 公司總部 head.append(new MarketDepartment("深圳XX集團有限公司--市場部")); head.append(new MinTechDepartment("深圳XX集團有限公司--技術部")); Firm jsFirm = new BranchFirm("深圳XX集團有限公司-江蘇分公司"); jsFirm.append(new MarketDepartment("深圳XX集團有限公司-江蘇分公司市場部")); jsFirm.append(new MinTechDepartment("深圳XX集團有限公司-江蘇分公司技術部")); Firm szFirm = new BranchFirm("深圳XX集團有限公司-江蘇分公司-蘇州辦事處"); szFirm.append(new MinTechDepartment("深圳XX集團有限公司-江蘇分公司-蘇州辦事處技術部")); szFirm.append(new MarketDepartment("深圳XX集團有限公司-江蘇分公司-蘇州辦事處市場部")); jsFirm.append(szFirm); // 如果還需要新增分公司或辦事處等,就繼續(xù)按照上述操作處理 head.append(jsFirm); head.show(0); } }
看完上述內容,你們對在JAVA項目中組合模式的實現(xiàn)原理是什么有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。