組合模式基本信息

中文名 組合模式 外文名 Composite Pattern
適用性 想表示對象的部分-整體層次結(jié)構(gòu) 類????別 軟件設(shè)計模式

組合模式解耦了客戶程序與復(fù)雜元素內(nèi)部結(jié)構(gòu),從而使客戶程序可以像處理簡單元素一樣來處理復(fù)雜元素。

如果你想要創(chuàng)建層次結(jié)構(gòu),并可以在其中以相同的方式對待所有元素,那么組合模式就是最理想的選擇。本章使用了一個文件系統(tǒng)的例子來舉例說明了組合模式的用途。在這個例子中,文件和目錄都執(zhí)行相同的接口,這是組合模式的關(guān)鍵。通過執(zhí)行相同的接口,你就可以用相同的方式對待文件和目錄,從而實(shí)現(xiàn)將文件或者目錄儲存為目錄的子級元素。

組合模式造價信息

市場價 信息價 詢價
材料名稱 規(guī)格/型號 市場價
(除稅)
工程建議價
(除稅)
行情 品牌 單位 稅率 供應(yīng)商 報價日期
模數(shù)式伸縮縫 C40 查看價格 查看價格

OVM

m 13% 柳州東方工程橡膠制品有限公司
模數(shù)式伸縮縫 E40 查看價格 查看價格

OVM

m 13% 柳州東方工程橡膠制品有限公司
模數(shù)式伸縮縫 Z80 查看價格 查看價格

OVM

m 13% 柳州東方工程橡膠制品有限公司
模數(shù)式伸縮縫 E80 查看價格 查看價格

OVM

m 13% 柳州東方工程橡膠制品有限公司
模數(shù)式伸縮縫 F40 查看價格 查看價格

OVM

m 13% 柳州東方工程橡膠制品有限公司
模數(shù)式伸縮縫 Z40 查看價格 查看價格

OVM

m 13% 柳州東方工程橡膠制品有限公司
模數(shù)式伸縮縫 C80 查看價格 查看價格

OVM

m 13% 柳州東方工程橡膠制品有限公司
模數(shù)式伸縮縫 F80 查看價格 查看價格

OVM

m 13% 柳州東方工程橡膠制品有限公司
材料名稱 規(guī)格/型號 除稅
信息價
含稅
信息價
行情 品牌 單位 稅率 地區(qū)/時間
組合烘箱 查看價格 查看價格

臺班 汕頭市2012年2季度信息價
組合烘箱 查看價格 查看價格

臺班 汕頭市2011年4季度信息價
組合烘箱 查看價格 查看價格

臺班 汕頭市2011年1季度信息價
組合烘箱 查看價格 查看價格

臺班 廣州市2010年3季度信息價
組合烘箱 查看價格 查看價格

臺班 廣州市2009年3季度信息價
組合烘箱 查看價格 查看價格

臺班 汕頭市2009年3季度信息價
組合烘箱 查看價格 查看價格

臺班 汕頭市2009年1季度信息價
組合烘箱 查看價格 查看價格

臺班 汕頭市2008年3季度信息價
材料名稱 規(guī)格/需求量 報價數(shù) 最新報價
(元)
供應(yīng)商 報價地區(qū) 最新報價時間
情景模式 根據(jù)不同情景模式設(shè)置多系統(tǒng)控制設(shè)備的指令集合|1項 3 查看價格 霍尼韋爾(中國)有限公司 廣東   2021-06-18
體感互動識別模式 支持單人識別模式|2套 1 查看價格 北京華創(chuàng)盛遠(yuǎn)科技有限公司 全國   2022-08-10
體感互動識別模式 支持單人識別模式|2套 1 查看價格 廣州恒納文化創(chuàng)意有限公司 全國   2022-10-24
體感互動識別模式 支持單人識別模式|2套 2 查看價格 安徽東一特電子技術(shù)有限公司 全國   2022-09-21
模式管理模塊 提供控制邏輯或運(yùn)行模式編輯功能,|1套 1 查看價格 施耐德電氣(中國)投資有限公司 全國   2018-11-30
模式龍頭 寶龍056|9512套 1 查看價格 寶龍衛(wèi)浴 廣東  陽江市 2015-10-30
J40|4只 1 查看價格 成都市三宇儀表科技發(fā)展有限公司 四川  成都市 2011-12-13
模式小便閥 C-05|6791件 1 查看價格 佛山市法恩潔具有限公司廣州辦事處 廣東  廣州市 2015-08-10

基于Java的樣例:

比如現(xiàn)實(shí)中公司內(nèi)各部門的層級關(guān)系

抽象接口類:

package com.zyh.designpattern.composite;

public abstract class Company {

private String name;

public Company(String name) {

super();

this.name = name;

}

public Company(){}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

protected abstract void add(Company company);

protected abstract void romove(Company company);

protected abstract void display(int depth);

}

枝結(jié)點(diǎn)類:

package com.zyh.designpattern.composite;

import java.util.ArrayList;

import java.util.List;

public class ConcreteCompany extends Company {

private List cList;

public ConcreteCompany() {

cList = new ArrayList();

}

public ConcreteCompany(String name) {

super(name);

cList = new ArrayList();

}

@Override

protected void add(Company company) {

// TODO Auto-generated method stub

cList.add(company);

}

@Override

protected void display(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.getName());

for (Company c : cList) {

c.display(depth 2);

}

}

@Override

protected void romove(Company company) {

// TODO Auto-generated method stub

cList.remove(company);

}

}

兩個葉結(jié)點(diǎn)類:

------------------------- 1---------------------------.

package com.zyh.designpattern.composite;

public class HRDepartment extends Company {

public HRDepartment(String name) {

super(name);

}

@Override

protected void add(Company company) {

}

@Override

protected void display(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.getName());

}

@Override

protected void romove(Company company) {

}

}

----------------2-------------------

package com.zyh.designpattern.composite;

public class FinanceDepartment extends Company {

public FinanceDepartment(String name) {

super(name);

}

@Override

protected void add(Company company) {

}

@Override

protected void display(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.getName());

}

@Override

protected void romove(Company company) {

}

}

客戶端:

package com.zyh.designpattern.composite;

public class Client {

public static void main(String[] args) {

// TODO Auto-generated method stub

Company root = new ConcreteCompany();

root.setName("北京總公司");

root.add(new HRDepartment("總公司人力資源部"));

root.add(new FinanceDepartment("總公司財務(wù)部"));

Company shandongCom = new ConcreteCompany("山東分公司");

shandongCom.add(new HRDepartment("山東分公司人力資源部"));

shandongCom.add(new FinanceDepartment("山東分公司賬務(wù)部"));

Company zaozhuangCom = new ConcreteCompany("棗莊辦事處");

zaozhuangCom.add(new FinanceDepartment("棗莊辦事處財務(wù)部"));

zaozhuangCom.add(new HRDepartment("棗莊辦事處人力資源部"));

Company jinanCom = new ConcreteCompany("濟(jì)南辦事處");

jinanCom.add(new FinanceDepartment("濟(jì)南辦事處財務(wù)部"));

jinanCom.add(new HRDepartment("濟(jì)南辦事處人力資源部"));

shandongCom.add(jinanCom);

shandongCom.add(zaozhuangCom);

Company huadongCom = new ConcreteCompany("上海華東分公司");

huadongCom.add(new HRDepartment("上海華東分公司人力資源部"));

huadongCom.add(new FinanceDepartment("上海華東分公司賬務(wù)部"));

Company hangzhouCom = new ConcreteCompany("杭州辦事處");

hangzhouCom.add(new FinanceDepartment("杭州辦事處財務(wù)部"));

hangzhouCom.add(new HRDepartment("杭州辦事處人力資源部"));

Company nanjingCom = new ConcreteCompany("南京辦事處");

nanjingCom.add(new FinanceDepartment("南京辦事處財務(wù)部"));

nanjingCom.add(new HRDepartment("南京辦事處人力資源部"));

huadongCom.add(hangzhouCom);

huadongCom.add(nanjingCom);

root.add(shandongCom);

root.add(huadongCom);

root.display(0);

}

}

基于C 的樣例:

//Menu.h

#include

class Menu

{

public:

virtual ~Menu();

virtual void Add(Menu*);

virtual void Remove(Menu*);

virtual Menu* GetChild(int);

virtual void Display() = 0;

protected:

Menu();

Menu(std::string);

std::string m_strName;

};

//Menu.cpp

#include "stdafx.h"

#include "Menu.h"

Menu::Menu()

{

}

Menu::Menu(std::string strName) : m_strName(strName)

{

}

Menu::~Menu()

{

}

void Menu::Add(Menu* pMenu)

{}

void Menu::Remove(Menu* pMenu)

{}

Menu* Menu::GetChild(int index)

{

return NULL;

}

//SubMenu.h

#include "Menu.h"

class SubMenu : public Menu

{

public:

SubMenu();

SubMenu(std::string);

virtual ~SubMenu();

void Display();

};

//SubMenu.cpp

#include "stdafx.h"

#include "SubMenu.h"

#include

using namespace std;

SubMenu::SubMenu()

{

}

SubMenu::SubMenu(string strName) : Menu(strName)

{

}

SubMenu::~SubMenu()

{

}

void SubMenu::Display()

{

cout << m_strName << endl;

}

//CompositMenu.h

#include "Menu.h"

#include

class CompositMenu : public Menu

{

public:

CompositMenu();

CompositMenu(std::string);

virtual ~CompositMenu();

void Add(Menu*);

void Remove(Menu*);

Menu* GetChild(int);

void Display();

private:

std::vector m_vMenu;

};

//CompositMenu.cpp

#include "stdafx.h"

#include "CompositMenu.h"

#include

using namespace std;

CompositMenu::CompositMenu()

{

}

CompositMenu::CompositMenu(string strName) : Menu(strName)

{

}

CompositMenu::~CompositMenu()

{

}

void CompositMenu::Add(Menu* pMenu)

{

m_vMenu.push_back(pMenu);

}

void CompositMenu::Remove(Menu* pMenu)

{

m_vMenu.erase(&pMenu);

}

Menu* CompositMenu::GetChild(int index)

{

return m_vMenu[index];

}

void CompositMenu::Display()

{

cout << " " << m_strName << endl;

vector ::iterator it = m_vMenu.begin();

for (; it != m_vMenu.end(); it)

{

cout << "|-";

(*it)->Display();

}

}

#include "stdafx.h"

#include "Menu.h"

#include "SubMenu.h"

#include "CompositMenu.h"

int main(int argc, char* argv[])

{

Menu* pMenu = new CompositMenu("國內(nèi)新聞");

pMenu->Add(new SubMenu("時事新聞"));

pMenu->Add(new SubMenu("社會新聞"));

pMenu->Display();

pMenu = new CompositMenu("國際新聞");

pMenu->Add(new SubMenu("國際要聞"));

pMenu->Add(new SubMenu("環(huán)球視野"));

pMenu->Display();

return 0;

}2100433B

組合模式(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)容可以是文件,也可以是目錄。按照這種方式,計算機(jī)的文件系統(tǒng)就是以遞歸結(jié)構(gòu)來組織的。如果你想要描述這樣的數(shù)據(jù)結(jié)構(gòu),那么你可以使用組合模式Composite。

定義

(GoF《設(shè)計模式》):將對象組合成樹形結(jié)構(gòu)以表示“部分整體”的層次結(jié)構(gòu)。組合模式使得用戶對單個對象和組合對象的使用具有一致性。

涉及角色:

1.Component 是組合中的對象聲明接口,在適當(dāng)?shù)那闆r下,實(shí)現(xiàn)所有類共有接口的默認(rèn)行為。聲明一個接口用于訪問和管理Component子部件。

2.Leaf 在組合中表示葉子結(jié)點(diǎn)對象,葉子結(jié)點(diǎn)沒有子結(jié)點(diǎn)。

3.Composite 定義有枝節(jié)點(diǎn)行為,用來存儲子部件,在Component接口中實(shí)現(xiàn)與子部件有關(guān)操作,如增加(add)和刪除(remove)等。

適用性

以下情況下適用Composite模式:

1.你想表示對象的部分-整體層次結(jié)構(gòu)

2.你希望用戶忽略組合對象與單個對象的不同,用戶將統(tǒng)一地使用組合結(jié)構(gòu)中的所有對象。

組合模式常見問題

組合模式文獻(xiàn)

企業(yè)項目組合管理模式研究 企業(yè)項目組合管理模式研究

格式:pdf

大?。?span id="axxxkwu" class="single-tag-height">110KB

頁數(shù): 1頁

評分: 4.5

項目組合管理是一種新的管理思想,它是隨著社會和項目管理的不斷發(fā)展而產(chǎn)生的,本文將項目組合管理與項目管理進(jìn)行對比,顯示出項目組合管理具有明顯的優(yōu)勢。根據(jù)項目組合管理的特點(diǎn),本文構(gòu)建了項目組合管理流程模型,并對各階段進(jìn)行了闡述。

立即下載
風(fēng)冷熱泵組合運(yùn)行除霜模式研究 風(fēng)冷熱泵組合運(yùn)行除霜模式研究

格式:pdf

大?。?span id="pdn2x7b" class="single-tag-height">110KB

頁數(shù): 3頁

評分: 4.7

針對某些高濕地區(qū)冬季風(fēng)冷熱泵結(jié)霜嚴(yán)重的問題,提出了一種新的熱泵除霜運(yùn)行模式一組合運(yùn)行除霜模式,并對在該模式下熱泵機(jī)組的穩(wěn)定運(yùn)行性能和節(jié)能特點(diǎn)進(jìn)行了分析;計算分析表明:采用組合運(yùn)行除霜模式可以提高熱泵運(yùn)行的經(jīng)濟(jì)性、低溫環(huán)境下熱泵機(jī)組供熱的穩(wěn)定性和供熱舒適度。

立即下載

組合模式或組合振動。},il}iriatior} rnodr:s。:c:}mbiri tiaiivi E}rativn、在紅外光譜中通常出現(xiàn)很多的弱吸收,組合模式或組合振動系指對應(yīng)于兩個或多個基本振動頻率之和起源,它的弱吸收于多原子分子振動態(tài)相壇作夕}J的振了的非i皆f'}與基頻振動及倍頻所引起的吸收相比,這些吸收是比r}弱的

2100433B

《組合折腹橋梁設(shè)計模式指南》是作者劉玉擎、陳艾榮對組合折腹橋梁研究和實(shí)踐成果的總結(jié)。為了能夠具有條理性、系統(tǒng)性地論述組合折腹橋梁的設(shè)計方法,基于現(xiàn)行行業(yè)標(biāo)準(zhǔn)的編制原則和基本要求,以指南正文和條文說明相結(jié)合的方式構(gòu)建了設(shè)計模式指南,并以附錄的形式給出了設(shè)計算例和國內(nèi)外幾座橋梁設(shè)計與施工的實(shí)例。

《組合折腹橋梁設(shè)計模式指南》可供從事橋梁工程設(shè)計、施工和科研等工作的人員參考,也可供相關(guān)專業(yè)的研究生查用。

Lab模式介紹

是由國際照明委員會(CIE)于1976年公布的一種色彩模式。

RGB模式是一種發(fā)光屏幕的加色模式,CMYK模式是一種顏色反光的印刷減色模式。而Lab模式既不依賴光線,也不依賴于顏料,它是CIE組織確定的一個理論上包括了人眼可以看見的所有色彩的色彩模式。

Lab模式組成

彌補(bǔ)了RGB和CMYK兩種色彩模式的不足。

Lab模式由三個通道組成,但不是R、G、B通道。它的一個通道是明度,即L。另外兩個是色彩通道,用A和B來表示。A通道包括的顏色是從深綠色(低亮度值)到灰色(中亮度值)再到亮粉紅色(高亮度值);B通道則是從深藍(lán)色(低亮度值)到灰色(中亮度值)再到黃色(高亮度值)。因此,這種色彩混合后將產(chǎn)生明亮的色彩。

組合模式相關(guān)推薦
  • 相關(guān)百科
  • 相關(guān)知識
  • 相關(guān)專欄

最新詞條

安徽省政采項目管理咨詢有限公司 數(shù)字景楓科技發(fā)展(南京)有限公司 懷化市人民政府電子政務(wù)管理辦公室 河北省高速公路京德臨時籌建處 中石化華東石油工程有限公司工程技術(shù)分公司 手持無線POS機(jī) 廣東合正采購招標(biāo)有限公司 上海城建信息科技有限公司 甘肅鑫禾國際招標(biāo)有限公司 燒結(jié)金屬材料 齒輪計量泵 廣州采陽招標(biāo)代理有限公司河源分公司 高鋁碳化硅磚 博洛尼智能科技(青島)有限公司 燒結(jié)剛玉磚 深圳市東海國際招標(biāo)有限公司 搭建香蕉育苗大棚 SF計量單位 福建省中億通招標(biāo)咨詢有限公司 泛海三江 威海鼠尾草 廣東國咨招標(biāo)有限公司 Excel 數(shù)據(jù)處理與分析應(yīng)用大全 甘肅中泰博瑞工程項目管理咨詢有限公司 山東創(chuàng)盈項目管理有限公司 拆邊機(jī) 當(dāng)代建筑大師 廣西北纜電纜有限公司 大山檳榔 上海地鐵維護(hù)保障有限公司通號分公司 舌花雛菊 甘肅中維國際招標(biāo)有限公司 華潤燃?xì)猓ㄉ虾#┯邢薰? 湖北鑫宇陽光工程咨詢有限公司 GB8163標(biāo)準(zhǔn)無縫鋼管 中國石油煉化工程建設(shè)項目部 韶關(guān)市優(yōu)采招標(biāo)代理有限公司 莎草目 建設(shè)部關(guān)于開展城市規(guī)劃動態(tài)監(jiān)測工作的通知 電梯平層準(zhǔn)確度 廣州利好來電氣有限公司 蘇州弘創(chuàng)招投標(biāo)代理有限公司