設計模式 12 復合模式(模式的模式)

2021-08-19 06:19:54 字數 3946 閱讀 6257

}剩餘3個鴨子物件省略

///

/// 鵝

///public

class goose

}

///

/// 使用介面卡模式建立乙個會鵝叫的鴨子。

///public

class gooseadapter : iquackable

public

void

quack()

}

///

/// quackcounter類為裝飾者

///public

class quackcounter : iquackable

set}

public

quackcounter(iquackable duck)

public

void

quack()

}

///

/// 抽象工廠類

///public

abstract

class abstractduckfactory

///

/// 使用工廠,建立沒有被裝飾的鴨子

///public

class duckfactory : abstractduckfactory

//使用工廠,建立沒有被裝飾的鴨子

public

override iquackable createduckcall()

//使用工廠,建立沒有被裝飾的鴨子

public

override iquackable createpinkheadduck()

//使用工廠,建立沒有被裝飾的鴨子

public

override iquackable createrubberduck()

}

///

/// 使用工廠和裝飾者,建立被裝飾的鴨子

///public

class countingduckfactory : abstractduckfactory

//使用裝飾者,建立被裝飾的鴨子

public

override iquackable createduckcall()

//使用裝飾者,建立被裝飾的鴨子

public

override iquackable createpinkheadduck()

//使用裝飾者,建立被裝飾的鴨子

public

override iquackable createrubberduck()

}

///

/// 迭代器模式

///public

class flockenum : ienumerator

catch (indexoutofrangeexception)}}

object ienumerator.current

}public

flockenum(iquackable quackers)

public

bool

movenext()

public

void

reset()

}

///

/// 使用組合模式和迭代器模式

///public

class flock : iquackable, ienumerable

public flockenum getenumerator()

public

void

quack()

}ienumerator ienumerable.getenumerator()

}

public

class iquackableobservable : iobservable

public idisposable subscribe(iobserverobserver)

return

new unsubscriber(observers, observer);

}private

class unsubscriber : idisposable

public

void

dispose()

}public

void

notify(iquackable value)}}

public

class iquackableobserver : iobserver

}public

void

oncompleted()

public

void

onerror(exception error)

public

void

onnext(iquackable value)

//某觀察者將要取消接收通知。

public

virtual

void

unsubscribe()

}

ducksimulator ducksimulator = new ducksimulator();

abstractduckfactory duckfactory = new countingduckfactory();

ducksimulator.simnulate(duckfactory);

internal

class ducksimulator

; //使用組合模式和迭代器模式

flock flockofducks = new flock(quacks);

console.writeline("------鴨子模擬器-------");

simnulate(flockofducks);

console.writeline("------觀察開始-------");

//使用觀察者模式

iquackableobservable provider = new iquackableobservable();

iquackableobserver reporter1 = new iquackableobserver();

reporter1.subscribe(provider);

provider.notify(duckfactory.createrubberduck());

console.writeline("------觀察結束-------");

console.writeline("鴨子叫的次數為:" + quackcounter.numberofquacks);

}void simnulate(iquackable duck)

}

------鴨子模擬器-------

鴨子叫鴨子叫

鴨鳴器在叫...

橡皮鴨在叫...

鵝在叫...

------觀察開始-------

橡皮鴨在叫...

------觀察結束-------

鴨子叫的次數為:5

p419-45

設計模式 復合模式

復合模式原理 什麼是復合模式 模式常一起使用,組合在乙個設計解決方案中 復合模式在乙個解決方案中結合兩個或多個模式 能解決一般性或一系列的問題 某些模式結合使用,並不就是復合模式 複雜鴨子專案 多種鴨子,不同鴨子叫聲 飛行 游泳方式不同 策略模式 鵝,需要加入幾隻普通的鵝 介面卡模式 要統計鴨子叫聲...

HeadFirst 設計模式 復合模式

模式通常被一起使用,並被組合在同乙個設計解決方案中。復合模式定義 復合模式在乙個解決方案中結合兩個或多個模式,以解決一般或重 生的問題。mvc,mode 模型 view 檢視 controller 控制器 分別是mvc的三個部分。使用mvc模式,目的是為了解耦,各模組部分只需要處理相應的內容。檢視層...

設計模式 復合

這已經發布在中 復合設計模式是關於乙個層次結構,其中具有子節點的節點的行為與無子節點的行為不同。該模式包含三個元素 乙個典型的示例是其中包含資料夾和檔案的檔案系統 資料夾可以包含files,其他資料夾,也可以為空。另一方面,檔案不包含資料夾或其他檔案!請記住,設計模式最重要的方面是意圖!一旦了解了它...