设计模式系列漫谈之二 - 工厂方法模式
生活随笔
收集整理的這篇文章主要介紹了
设计模式系列漫谈之二 - 工厂方法模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
故事
?????? 10月1日是小雪的生日。許多追求者都想在生日那天給小雪一份意想不到的驚喜,并且表達自己的愛意。這些追求者絞盡腦汁的為小雪發送一個比較有創意的祝福短信。看來,小雪今年的生日過得肯定非常幸福。但是,小雪的手機還是比較特別,只能接受來自跟她手機品牌相同的短信。怎么辦呢?
?????? 這些追求者正在為如何發送生日祝福的問題發愁的時候,善良的小雪為了不辜負這些追求者的良苦用心,為追求者提供統一的發送方法,并且實現不同品牌的手機發送短信。這樣一來,這些追求者再也不用擔心小雪接收不到精心準備的生日祝福了。
工廠方法模式(Factory Method)的解決方案
?? 小雪的做法正是工廠方法模式的思想:使一個類的實例化延遲到子類。定義一個用于創建對象的工廠類,由其決定實例化同一抽象類派生出來的具體類。此模式主要包括三個角色:工廠類,抽象類(接口),具體類。
接口如下: namespace?XiaoXue
{
???public?interface?IMessage
???{
????????void?SendMessage(object?Msg);
???}
}工廠類如下: namespace?XiaoXue
{
???public?class?MessageFactory
????{
???????public?static?IMessage?CreateMessage(string?Type)
????????{
????????????IMessage?message=?null;
???????????switch?(Type)
???????????{
????????????????case?"NOKIA":
????????????????????message?=?new?NOKIA();
????????????????????break;
???????????????case?"MOTOROLA":
???????????????????message?=?new?MOTOROLA();
???????????????????break;
????????????????case?"SANSUNG":
????????????????????message?=?new?SANSUNG();
???????????????????break;
????????????}
????????????return?message;
???????}
???}
}
根據不同的手機類型實現的具體類如下: namespace?XiaoXue
{
????public?class?NOKIA?:?IMessage
????{
????????public?void?SendMessage(object?msg)
????????{
????????????//發送NOKIA短信;
????????}
????}
????public?class?MOTOROLA?:?IMessage
????{
????????public?void?SendMessage(object?msg)
????????{
????????????//發送MOTOROLA短信;
????????}
????}
????public?class?SANSUNG?:?IMessage
????{
????????public?void?SendMessage(object?msg)
????????{
????????????//發送SANSUNG短信;
????????}
????}
}
這樣一來,這些追求者就很方便給小雪發送生日祝福了,例如Nokia手機發短信:
IMessage message=MessageFactory.CreateMessage("NOKIA");
message.SendMessage("生日快樂,祝小雪越長越漂亮。喜歡你的張三");
?????? 10月1日是小雪的生日。許多追求者都想在生日那天給小雪一份意想不到的驚喜,并且表達自己的愛意。這些追求者絞盡腦汁的為小雪發送一個比較有創意的祝福短信。看來,小雪今年的生日過得肯定非常幸福。但是,小雪的手機還是比較特別,只能接受來自跟她手機品牌相同的短信。怎么辦呢?
?????? 這些追求者正在為如何發送生日祝福的問題發愁的時候,善良的小雪為了不辜負這些追求者的良苦用心,為追求者提供統一的發送方法,并且實現不同品牌的手機發送短信。這樣一來,這些追求者再也不用擔心小雪接收不到精心準備的生日祝福了。
工廠方法模式(Factory Method)的解決方案
?? 小雪的做法正是工廠方法模式的思想:使一個類的實例化延遲到子類。定義一個用于創建對象的工廠類,由其決定實例化同一抽象類派生出來的具體類。此模式主要包括三個角色:工廠類,抽象類(接口),具體類。
接口如下: namespace?XiaoXue
{
???public?interface?IMessage
???{
????????void?SendMessage(object?Msg);
???}
}工廠類如下: namespace?XiaoXue
{
???public?class?MessageFactory
????{
???????public?static?IMessage?CreateMessage(string?Type)
????????{
????????????IMessage?message=?null;
???????????switch?(Type)
???????????{
????????????????case?"NOKIA":
????????????????????message?=?new?NOKIA();
????????????????????break;
???????????????case?"MOTOROLA":
???????????????????message?=?new?MOTOROLA();
???????????????????break;
????????????????case?"SANSUNG":
????????????????????message?=?new?SANSUNG();
???????????????????break;
????????????}
????????????return?message;
???????}
???}
}
根據不同的手機類型實現的具體類如下: namespace?XiaoXue
{
????public?class?NOKIA?:?IMessage
????{
????????public?void?SendMessage(object?msg)
????????{
????????????//發送NOKIA短信;
????????}
????}
????public?class?MOTOROLA?:?IMessage
????{
????????public?void?SendMessage(object?msg)
????????{
????????????//發送MOTOROLA短信;
????????}
????}
????public?class?SANSUNG?:?IMessage
????{
????????public?void?SendMessage(object?msg)
????????{
????????????//發送SANSUNG短信;
????????}
????}
}
這樣一來,這些追求者就很方便給小雪發送生日祝福了,例如Nokia手機發短信:
IMessage message=MessageFactory.CreateMessage("NOKIA");
message.SendMessage("生日快樂,祝小雪越長越漂亮。喜歡你的張三");
轉載于:https://www.cnblogs.com/ruochen/archive/2007/12/16/996707.html
總結
以上是生活随笔為你收集整理的设计模式系列漫谈之二 - 工厂方法模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工银world奋斗金卡最低额度是多少?
- 下一篇: XML数据岛(XML Data Isla