2.工厂方法(Factory Method)

1.工厂方法(Factory Method)

为什么要有工厂方法?我们知道。每一种设计模式的出现,都是为了解决一些问题的,那么工厂方法想要解决什么问题呢?先看个示例。

Monster m = new Monster();

很简单哈,就是实例化了一个类,那么思考一个问题,如果对象的创建过程过于繁琐或庞大,或该类有可能进行同类型扩展, 那么在这样的简单的去实现就不太好了,这时候我们建议将类的创建单独放到一个类里进行,这个类就叫做工厂。

意图:定义用于创建对象的接口, 但让实现该接口的类决定要实例化哪个类。

画个类图用来表示下。

6375263-21e47bfcd21e9a0c.png

奥特曼


这个应该很简单,嗯,来看个复杂的。

6375263-61ed0473d7b872e8.png

image.png


图中有一个IFactory的接口,里面有两个实现类,UltranmanFactoryWBDFactory,同时还有一个接口叫IMonster,它也有两个实现类,WhiteBoonDemonUltraman,(奥特曼和白骨精)同时这两个类也都依赖于UltranmanFactoryWBDFactory。有点麻烦了,那咱们把这个类图简化一下。如图。

6375263-eda910a3fe926c03.png

image.png


这里简单说一下Factory,Factory是对抽象接口的实现也就是创建对象。
说了这么多,接下来看看代码。
先看IFactory.cs

 

namespace FactoryMethod
{
    interface IFactory
    {
        IMonster Create();
    }
}

IMonster.cs

namespace FactoryMethod
{
    interface IMonster
    {
        void Show();
    }
}

Ultraman.cs

using System;

namespace FactoryMethod
{
    class Ultraman:IMonster
    {
        public void Show()
        {
            Console.WriteLine("奥特曼:我们是光的使者,正义的化身");
        }
    }
}

WhiteBoonDemon.cs

using System;

namespace FactoryMethod
{
    class WhiteBoonDemon:IMonster
    {
        public void Show()
        {
            Console.WriteLine("白骨精:哈哈哈哈");
        }
    }
}

UltramanFactory.cs

namespace FactoryMethod
{
    class UltramanFactory:IFactory
    {
        public IMonster Create()
        {
            //..
            return new Ultraman();
        }
    }
}

WBDFactory.cs

namespace FactoryMethod
{
    class WBDFactory:IFactory 
    {
        public IMonster Create()
        {
            //。。。
            return new WhiteBoonDemon();             
        }
    }
}

最后看下main函数如何调用。Program.cs

using System;

namespace FactoryMethod
{
    class Program
    {
        static void Main(string[] args)
        {
            IFactory f = new WBDFactory();
            f.Create().Show();
            
            Console.Read();
        }
    }
}

2.结语

A a = new A();
多考虑,是否用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。

更多学习资料请关注"爱游戏爱编程"。

6375263-578835b1e5aa99fa.jpg

爱游戏爱编程.jpg

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李公子lm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值