设计模式:工厂模式

简单工厂模式

简单工厂模式:参数化的静态方法,为用户提供实例的创建。

public static ClassName MethodName(参数){}

简单工厂模式的几种情况:

  1. 对象只有一种,这种情况下方法没必要携带参数。
  2. 对象有多个的时候,且是同对象类型,可以加入抽象对象,好处是可以让用户不去关心具体的对象。
  3. 对象有多个,但是对象类型是不同的,可以采用其他模式或者多个工厂模式方法来实现(一般后者不去考虑)
  4. 实际应用中,对象、工厂对象,都是可以根据实际情况合并(模式变形)。

简单工厂介绍:

  • 如果对象创建的时候需要用户指引,那么简单工厂模式是不合适的,如要适用会使方法参数过于复杂因此简单的工厂模式,不去关心对象的创建,而是去关心对象的使用。
  • 大多数情况下用户还是必须要知道产品的具体细节,没有减少对细节的依赖(特殊情况,有抽象对象的情况下,在某些应用中可以减少对具体产品的细节依赖)
  • 采用静态方法实现类的创建,好处是减少工厂类的创建,缺点是失去了工厂类的继承扩展的优点。
  • 简单工厂模式的好处是实现了责任分离,对用户来讲同时也隐藏了构建对象的细节,实现比较简单。
  • 增加对象的时候,工厂类需要修改,违背了面向对象的开放封闭原则。
  • 只合适对象类比较少的情况下,如果对象类太多,会使静态工厂方法过于庞大。

有一种比较简单的办法,就是采用反射或者泛型类规避静态方法过多而使得工厂类庞大。

工厂模式优缺点

优点
  • 符合开放封闭原则,因为增加新的产品不需要修改原来已有的工厂类,只需要增加相应的工厂即可。
  • 将使用和创建的责任分开。
  • 符合设计的先抽象后具体的顺序。

缺点
  • 如果产品类太多会导致增加很多的类,会使系统显得很不简洁。
  • 如果将选择逻辑交给用户,则在一定程度上增加了用户对细节的依赖。
  • 与简单工厂模式相比,增加了工厂本身的创建开销。
  • 用户需要创建工厂类本身.(通过一定的方法可以将工厂类的创建委托给抽象类去完成.见例子。
/*
 * by:jxb   2017.4.2
 */

namespace 设计模式
{
    /// <summary>对象工厂</summary>
    abstract class ObjecFactory
    {
        /// <summary>创建工厂,委托给产品对象</summary>
        public static ObjectProduct CreateFactory<T>() where T : ObjecFactory, new()
        {
            T objecFactory = new T();
            return objecFactory.CreateObject();
        }
        /// <summary>创建产品对象</summary>
        public abstract ObjectProduct CreateObject();
    }

    /// <summary>对象产品类</summary>
    abstract class ObjectProduct
    {
        public abstract double getPrice();
    }

    /// <summary>创建的工厂类</summary>
    class ClassFactory : ObjecFactory
    {
        public override ObjectProduct CreateObject()
        {
            return new ClassProduct(5000);
        }
    }
    /// <summary>创建的对象产品类</summary>
    class ClassProduct : ObjectProduct
    {
        private double _price;
        public ClassProduct(double p)
        {
            this._price = p;
        }
        public override double getPrice()
        {
            return this._price;
        }
    }
}

unity pak包代码:百度网盘下载 密码:6s0y

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值