ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

设计模式之工厂方法

2022-07-21 01:00:10  阅读:174  来源: 互联网

标签:Car FactoryMethod Factory namespace 工厂 设计模式 方法 public


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

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

三、代码举例:

抽象汽车类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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有