}剩餘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,其他資料夾,也可以為空。另一方面,檔案不包含資料夾或其他檔案!請記住,設計模式最重要的方面是意圖!一旦了解了它...