組合模式解耦了客戶程序與復雜元素內部結構,從而使客戶程序可以像處理簡單元素一樣來處理復雜元素。

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

組合模式造價信息

市場價 信息價 詢價
材料名稱 規(guī)格/型號 市場價
(除稅)
工程建議價
(除稅)
行情 品牌 單位 稅率 供應商 報價日期
模數(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ù) 最新報價
(元)
供應商 報價地區(qū) 最新報價時間
情景模式 根據(jù)不同情景模式設置多系統(tǒng)控制設備的指令集合|1項 3 查看價格 霍尼韋爾(中國)有限公司 廣東   2021-06-18
體感互動識別模式 支持單人識別模式|2套 1 查看價格 北京華創(chuàng)盛遠科技有限公司 全國   2022-08-10
體感互動識別模式 支持單人識別模式|2套 1 查看價格 廣州恒納文化創(chuàng)意有限公司 全國   2022-10-24
體感互動識別模式 支持單人識別模式|2套 2 查看價格 安徽東一特電子技術有限公司 全國   2022-09-21
模式管理模塊 提供控制邏輯或運行模式編輯功能,|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

組合模式(Composite Pattern)

組合模式使得用戶對單個對象和組合對象的使用具有一致性。

有時候又叫做部分-整體模式,它使我們樹型結構的問題中,模糊了簡單元素和復雜元素的概念,客戶程序可以像處理簡單元素一樣來處理復雜元素,從而使得客戶程序與復雜元素的內部結構解耦。

組合模式讓你可以優(yōu)化處理遞歸或分級數(shù)據(jù)結構。有許多關于分級數(shù)據(jù)結構的例子,使得組合模式非常有用武之地。關于分級數(shù)據(jù)結構的一個普遍性的例子是你每次使用電腦時所遇到的:文件系統(tǒng)。文件系統(tǒng)由目錄和文件組成。每個目錄都可以裝內容。目錄的內容可以是文件,也可以是目錄。按照這種方式,計算機的文件系統(tǒng)就是以遞歸結構來組織的。如果你想要描述這樣的數(shù)據(jù)結構,那么你可以使用組合模式Composite。

定義

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

涉及角色:

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

2.Leaf 在組合中表示葉子結點對象,葉子結點沒有子結點。

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

適用性

以下情況下適用Composite模式:

1.你想表示對象的部分-整體層次結構

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

基于Java的樣例:

比如現(xià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);

}

枝結點類:

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);

}

}

兩個葉結點類:

------------------------- 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("總公司財務部"));

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

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

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

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

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

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

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

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

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

shandongCom.add(jinanCom);

shandongCom.add(zaozhuangCom);

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

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

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

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

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

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

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

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

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("國內新聞");

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

組合模式總結常見問題

組合模式總結文獻

創(chuàng)業(yè)孵化器的運營模式總結 創(chuàng)業(yè)孵化器的運營模式總結

格式:pdf

大?。?span id="gtle7uq" class="single-tag-height">56KB

頁數(shù): 10頁

評分: 4.4

創(chuàng)業(yè)孵化器的運營模式總結 模式一:企業(yè)平臺型 【模式現(xiàn)狀】 企業(yè)主導型孵化器是指基于企業(yè)現(xiàn)有先進技術資源,通 過技術扶持,襯以企業(yè)龐大的產(chǎn)業(yè)資源為創(chuàng)業(yè)者提供高效便 捷的創(chuàng)新創(chuàng)業(yè)服務。主導者通常為大型客機企業(yè),擁有雄厚 的資金實力,不追求創(chuàng)業(yè)初期的盈利,而是鼓勵創(chuàng)業(yè)在其現(xiàn) 有先進技術平臺上實現(xiàn)突破和創(chuàng)新。目標是未來能為主導者 帶來新模式,為上游企業(yè)帶來新技術。而主導企業(yè)在孵化器 中也可尋覓有助于打造未來新型業(yè)務模式的潛力股,優(yōu)先獲 得創(chuàng)新資源為主導企業(yè)實現(xiàn)突破?,F(xiàn)階段例如中國移動、電 信、聯(lián)通、百度、騰訊等科技型企業(yè)都已著手簡歷旗下孵化 器,吸引大批創(chuàng)業(yè)者加入。 【模式特點】大企業(yè)資源支持 + 內 /外部孵化結合 作為培植創(chuàng)新項目的方式之一,企業(yè)為創(chuàng)業(yè)者提供的是 “開放技術平臺 + 產(chǎn)業(yè)資源 ”,孵化的運作模式與大多數(shù) “風險投資 ”不同,需要 “導師”和“訓練”,優(yōu)劣兼具。 此類孵化器一般

立即下載
年度教學模式改革工作總結 年度教學模式改革工作總結

格式:pdf

大小:56KB

頁數(shù): 10頁

評分: 4.5

共享知識 分享快樂 卑微如螻蟻、堅強似大象 教學模式改革工作總結及成果 平頂山市機械電子科技學校 共享知識 分享快樂 卑微如螻蟻、堅強似大象 平頂山市機械電子科技學校 教學模式改革工作總結及成果 中等職業(yè)學校的目標定位是培養(yǎng)高素質的勞動者。 近年來我校進 行教學模式改革,廣泛實施模塊教學,對培養(yǎng)學生的綜合職業(yè)能力, 使之成為高素質的勞動者有著十分積極的意義。 一、教學模式 為了真正融入市場經(jīng)濟,完成職業(yè)教育的職責和任務, 中專學校都在積極探索改革, 不斷調整專業(yè)設置、 教學計劃和教學模 式,模塊教學就是在這種情況下出現(xiàn)的一種教學模式。 模塊教學模式 是國際勞工組織為幫助世界各國特別是發(fā)展中國家開展職業(yè)培訓、 提 高勞動者素質而開發(fā)出的一種技能培訓模式, 其核心是以崗位職業(yè)技 能為標準培訓勞動者。 其特點是將完成崗位工作所需的技能分解為多 個相對獨立的技能模塊, 每個模塊又分為若干學習單元。

立即下載

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

2100433B

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

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

Lab模式介紹

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

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

Lab模式組成

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

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

組合模式相關推薦
  • 相關百科
  • 相關知識
  • 相關專欄