其他分享
首页 > 其他分享> > 设计模式之工厂方法

设计模式之工厂方法

作者:互联网

一、工厂方法:简单工厂违背了单一职责原则,而且不利于扩展,于是衍生了工厂方法模式,该模式能很好地解决对扩展开放、对修改关闭的需求。

二、实现思路 :对每一个对象都创建一个对应的工厂类,对对象和工厂类都进行抽象,让上端尽量依赖抽象。

三、代码举例:

抽象汽车类Car:

namespace FactoryMethod
{
    public abstract class Car
    {
     public abstract  void  Drive();
    }
}

 抽象工厂类Factory:

namespace FactoryMethod
{
    public interface  Factory
    {
         Car CreateInstance();
    }
}

 奔驰汽车类BenChiCar:

namespace FactoryMethod
{
    public class BenChiCar:Car
    {
        public override void Drive()
        {
            Console.WriteLine("奔驰汽车行驶中!");
        }
    }
}

 宝马汽车类BaomaCar:

namespace FactoryMethod
{
    public class BaomaCar : Car
    {
        public override void Drive()
        {
            Console.WriteLine("宝马汽车行驶中!");
        }
    }
}

 大众汽车类DazongCar:

namespace FactoryMethod
{
    public class DazongCar:Car
    {
        public override void Drive()
        {
            Console.WriteLine("大众汽车行驶中!");
        }
    }
}

 奔驰汽车工厂类BenChiFactory:

namespace FactoryMethod
{
   public class BenChiFactory : Factory
    {
        public Car CreateInstance()
        {
            Console.WriteLine("创建了奔驰汽车!");
            return new BenChiCar();
        }
    }
}

 宝马汽车工厂类BaomaFactory:

namespace FactoryMethod
{
   public  class BaomaFactory : Factory
    {
        public Car CreateInstance()
        {
            Console.WriteLine("创建了宝马汽车!");
            return new BaomaCar();
        }
    }
}

 大众汽车工厂类DazongFactory:

namespace FactoryMethod
{
  public  class DazongFactory : Factory
    {
        public Car CreateInstance()
        {
            Console.WriteLine("创建了大众汽车!");
            return new DazongCar();
        }
    }
}

 客户类:

 {
   //工厂方法,一个对象对应一个工厂,之所以这么做,是为了将对象的创建逻转移给工厂类(对象的创建有可能很复杂,这样做减少了客户端对创建对象所需的资源的依赖),而且新增对象时不需要修改原来的类,只需增加对象和创建对象的工厂即可,遵循了对扩展开放,对修改关闭的原则。
    FactoryMethod.Factory Dazongfac = new FactoryMethod.DazongFactory();
    Car Dazong = Dazongfac.CreateInstance();
    Dazong.Drive();
    FactoryMethod.Factory Benchifac = new FactoryMethod.BenChiFactory();
    Car Benchi = Benchifac.CreateInstance();
    Benchi.Drive();
    FactoryMethod.Factory Baomafac = new FactoryMethod.BaomaFactory();
    Car Baoma = Baomafac.CreateInstance();
    Baoma.Drive();
    Console.ReadKey();
 }

 运行结果:

四、工厂方法的优缺点及应用:把对象创建的逻辑细节交给了工厂类,上端不需要关心创建对象需要的业务逻辑信息,但是增加了代码的复杂度 ;比起简单工厂能更好的进行扩展,需要增加对象时只需要增加一个对象和创建对象的工厂即可,不用修改原来的类,遵循了开闭原则,适用于创建复杂的对象,简单对象的创建没必要使用工厂方法模式。

标签:Car,FactoryMethod,Factory,namespace,工厂,设计模式,方法,public
来源: https://www.cnblogs.com/zqhIndex/p/10280134.html