本文共 2978 字,大约阅读时间需要 9 分钟。
现实生活中,原始社会自给自足(没有工厂),农耕社会小作坊(简单工厂,民间酒坊),工业革命流水线(工厂方法,自产自销),现代产业链代工厂(抽象工厂,富士康)。我们的项目代码同样是由简到繁一步一步迭代而来的,但对于调用者来说,却越来越简单。
在日常开发中,凡是需要生成复杂对象的地方,都可以尝试考虑使用工厂模式来代替我么定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。
按实际业务场景划分,工厂模式有 3 种不同的实现方式,分别是简单工厂模式、工厂方法模式和抽象工厂模式。1.介绍
我们把被创建的对象称为“产品”,把创建产品的对象称为“工厂”。如果要创建的产品不多,只要一个工厂类就可以完成,这种模式叫“简单工厂模式。在简单工厂模式中创建实例的方法通常为静态(static)方法,因此简单工厂模式(Simple Factory Pattern)又叫作静态工厂方法模式(Static Factory Method Pattern)。
简单来说,简单工厂模式有一个具体的工厂类,可以生成多个不同的产品,属于创建型设计模式。简单工厂模式不在 23 种设计模式之列。2.延伸
试想一下,当我们在coding的时候,在A类里面只要NEW了一个B类的对象,那么A类就会从某种程度上依赖B类。如果在后期需求发生变化或者是维护的时候,需要修改B类的时候,我们就需要打开源代码修改所有与这个类有关的类了,做过重构的朋友都知道,这样的事情虽然无法完全避免,但确实是一件让人心碎的事情。
3.模拟场景
在电影《速度与激情》中,主角需要根据导演不同的指令,来开不同的车。但是车都是在车库中存在的。车都属于同一种抽象,车库里所有的车都有自己的特征,这些特征就是条件。导演发出指令的时候,只要告诉场务特征,场务就知道提什么车。这就简单工厂模式的典型案例。
代码:
////// 抽象产品类: 汽车 /// public interface ICar { void GetCar(); } public enum CarType { SportCarType = 0, JeepCarType = 1, HatchbackCarType = 2 } ////// 具体产品类: 跑车 /// public class SportCar : ICar { public void GetCar() { Console.WriteLine("场务把——跑车,交给主角"); } } ////// 具体产品类: 越野车 /// public class JeepCar : ICar { public void GetCar() { Console.WriteLine("场务把——越野车,交给主角"); } } ////// 具体产品类: 货车 /// public class HatchbackCar : ICar { public void GetCar() { Console.WriteLine("场务把——货车,交给主角"); } } ////// 简单工厂核心代码 /// public class Factory { public ICar GetCar(CarType carType) { switch (carType) { case CarType.SportCarType: return new SportCar(); case CarType.JeepCarType: return new JeepCar(); case CarType.HatchbackCarType: return new HatchbackCar(); default: throw new Exception("我这里没有车,你走吧!"); } } } public class Program { static void Main(string[] args) { ICar car; try { Factory factory = new Factory(); Console.WriteLine("主角下一场戏开——跑车。"); car = factory.GetCar(CarType.SportCarType); car.GetCar(); Console.ReadKey(); } catch (Exception ex) { Console.WriteLine(ex.Message); } } }
优点:
缺点:
应用场景
对于产品种类相对较少的情况,考虑使用简单工厂模式。使用简单工厂模式的客户端只需要传入工厂类的参数,不需要关心如何创建对象的逻辑,可以很方便地创建所需产品。
参考:
转载地址:http://tjiii.baihongyu.com/