【设计模式】改进抽象工厂模式实例

这两天在修改网络消息规则,看到消息的实例化不就是简单工厂模式来改进抽象工厂模式来做的么。顺便就再来看看抽象工厂模式,这里面用到了反射,因为反射的原因我就简单的在unity工程下实现以下这个实例。至于反射的什么原因,可以看一下我的这篇文章的最下面。

是什么

提供一个接口与工厂相互依赖,而不是提供具体的类。概念就是这一句了。

来个图解

可以看到这里相互依赖的接口就是IMessage,我们通过这个再来返回实例,Factory里面的msgDic是用来存储消息名称与消息ID的。我们在这里就先把这个存储好。

具体实现

IMessage:

public interface IMessage
{
   void Print();
}

Message1:

public class Message1:IMessage
{
    public int id;
    public string name;
    
    public void Print() 
    { 
        Debug.Log("this Message1"); 
    }
}

Message2:

public class Message1:IMessage
{
    public int id;
    public string name;
    
    public void Print() 
    { 
        Debug.Log("this Message1"); 
    }
}

Factory:

public class Factory
{
    private readonly Dictionary<int,string> msgDic;
          
    public Factory() 
    { 
        msgDic=new Dictionary<int,string>();
        msgDic.Add(1,"Message1");
        msgDic.Add(2,"Message2");
    }

    public IMessage CreateMessage(int id)
    {
        if(!msgDic.ContainsKey(id))
        {
            return null;
        }
        return (IMessage)Assembly.GetCallingAssembly().CreateInstance(msgDic[id]);
    }
}

Client:

void Start()
{
    var factory=new Factory();
    factory.CreateMessage(1).Print();
    factory.CreateMessage(2).Print();
}

结果:

后面再对消息赋值就可以了。
当然这个模式不仅仅是用于这方面,工厂还可以生产其他的嘛,毕竟是世界大工厂嘛。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,273评论 19 139
  • 设计模式汇总 一、基础知识 1. 设计模式概述 定义:设计模式(Design Pattern)是一套被反复使用、多...
    MinoyJet阅读 4,003评论 1 15
  • 该文章属于刘小壮原创,转载请注明:刘小壮[https://www.jianshu.com/u/2de707c93d...
    刘小壮阅读 12,899评论 29 59
  • 简单工厂模式虽然简单,但存在一个很严重的问题。当系统中需要引入新产品时,由于静态工厂方法通过所传入参数的不同来创建...
    justCode_阅读 1,233评论 1 9
  • /01/ 前几天我一如既往的睡不着,就闲着没事儿回头翻了一下自己的朋友圈。 讲真,我真的是一个很爱发朋友圈的人,这...
    紫翼i阅读 380评论 0 4