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