设计模式系列漫谈之二 - 工厂方法模式

故事
       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("生日快乐,祝小雪越长越漂亮。喜欢你的张三");
posted @   李华星  阅读(634)  评论(2编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示