设计模式-简单工厂模式

设计模式-简单工厂模式

简单工厂模式(Simple Factory Pattern),又叫静态工厂方法模式(Static Factory Method Pattern)

简单工厂模式定义: 提供创建对象的接口,通常这些对象具有相同的类型。

对象具有相同的类型什么意思?我们不妨先来看简单工厂模式UML图
SimpleFactory

PC(个人电脑)是基类
Dell和IBM电脑继承了基类PC,他们都具有相同的类型,来自同一个基类(父类)。

如何运用呢?通常我们是这样创建对象比如Dell dell=new Dell() ,现在我们把这个过程封装到Factory中,
让Factory去帮我们完成这个创建工作。下面我们来看下具体的示例代码。

//抽象类
abstract class PC
{
    private string name;

    public PC(string name)
    {
        this.name = name;
    }

    public virtual string Name { get { return name; } set { name = value; } }
    public abstract void Describe();
}

//Dell具体类,继承基类PC
class Dell : PC
{
    public Dell(string name) : base(name)
    {

    }

    public override void Describe()
    {
        System.Console.WriteLine("I am {0} personal computer", Name);
    }
}

//IBM具体类,继承基类PC
class IBM : PC
{
    public IBM(string name) : base(name)
    {

    }

    public override void Describe()
    {
        System.Console.WriteLine("I am {0} personal computer", Name);
    }
}

//工厂类,用于实例化各子类对象
class Factory
{
    static PC pc;//定义基类对象

    //看到面向接口编程了吧,Create方法返回的就是基类PC类型,而不是具体的Dell或IBM类
    public static PC Create(string name)
    {
        if (name == "Dell")
            pc = new Dell(name);//创建Dell对象
        else if (name == "IBM")
            pc = new IBM(name);//创建IBM对象
        else
            throw new NullReferenceException("object name error: " + name);
        return pc;
    }
}

具体调用代码

            PC dell = Factory.Create("Dell");
            //pc = Factory.Create("xxDell")//这个调用将出错
            dell.Describe();
            dell.Name = "OtherDell";
            dell.Describe();

            System.Console.WriteLine();

            PC ibm = Factory.Create("IBM") ;  
            ibm.Describe();
            ibm.Name = "OtherIBM";
            ibm.Describe();

正确的调用方式
PC dell = Factory.Create(“Dell”);
这里写图片描述

这样调用将出错
pc = Factory.Create(“xxDell”)
这里写图片描述

简单工厂模式
优点:使用时不需要创建对象,统一由工厂创建。
缺点:必须知道要创建的具体对象的名称。

版权所有,转载请注明文章出处 http://blog/csdn.net/cadenzasolo

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值