工厂模式
模式 工厂
2023-09-11 14:21:07 时间
一、简单工厂
专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。它的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。
public interface ICar { void run(); } public class BMWCar : ICar { public void run() { Console.WriteLine("BMWCar run"); } } public class BenzCar : ICar { public void run() { Console.WriteLine("BenzCar run"); } } public class Driver { public static ICar DriverCar(string carType) { switch (carType) { case "BMWCar": return new BMWCar(); case "BenzCar": return new BenzCar(); default: throw new Exception(); } } } public class Client { public static void Main() { ICar myCar = Driver.DriverCar("BenzCar"); myCar.run(); Console.Read(); }
优点:只要实现共有的接口就可以实现不同车跑的方式.
缺点:添加新车型,需要修改Driver 类
二、工厂方法
工厂方法模式是对简单工厂模式进行了抽象。有一个抽象的Factory类(可以是抽象类或者接口),这个类将不在负责具体的产品生产,而是制定一些规范,具体的生产工作由其子类去完成。
using System; public interface ICar { void run(); } public class BMWCar : ICar { public void run() { Console.WriteLine("BMWCar run"); } } public class BenzCar : ICar { public void run() { Console.WriteLine("BenzCar run"); } } public abstract class Driver { public abstract ICar DriverCar(); } public class BMWDriver : Driver { public override ICar DriverCar() { return new BMWCar(); } } public class BenzDriver : Driver { public override ICar DriverCar() { return new BenzCar(); } } class Client { public static void Main() { Driver myDriver = new BenzDriver(); ICar myCar = myDriver.DriverCar(); myCar.run(); Console.Read(); } }
该模式的优点是符合了开放-封闭原则(OCP),能够任意增加新的具体产品类。
三、抽象工厂方法
有多个抽象产品类,每个抽象产品类可以派生出多个具体产品类,一个抽象工厂类,可以派生出多个具体工厂类,每个具体工厂类可以创建多个具体产品类的实例
using System; public interface IBusinessCar { void run(); } public interface ISportCar { void run(); } public class BMWBusinessCar : IBusinessCar { public void run() { Console.WriteLine("BMWCar run"); } } public class BenzBusinessCar : IBusinessCar { public void run() { Console.WriteLine("BenzBusinessCar run"); } } public class BMWSportCar:ISportCar { public void run() { Console.WriteLine("BMWSportCar run"); } } public class BenzSportCar:ISportCar { public void run() { Console.WriteLine("BenzSportCar run"); } } public interface IDriver { IBusinessCar BusinessCarDriver(); ISportCar SportCarDriver(); } public class BMWDriver:IDriver { public IBusinessCar BusinessCarDriver() { return new BMWBusinessCar(); } public ISportCar SportCarDriver() { return new BMWSportCar(); } } public class BenzDriver:IDriver { public IBusinessCar BusinessCarDriver() { return new BenzBusinessCar(); } public ISportCar SportCarDriver() { return new BenzSportCar(); } } class Client { public static void Main() { IDriver myDriver =new BenzDriver(); ISportCar myCar = myDriver.SportCarDriver(); myCar.run(); Console.Read(); } }
总结:
工厂方法只有一个抽象产品类,而抽象工厂可以有多个。
工厂方法的具体工厂类只创建一个具体产品类的实例,而抽象工厂的具体工厂可以创建多个。
重点:模式的条条框框区别都是次要的,最重要的是领悟思想、结合实际、活用规则!
相关文章
- 设计模式-原型模式
- 简单工厂模式、工厂方法模式、抽象工厂模式 之间的对比
- 设计模式-抽象工厂模式
- 设计模式复习-简单工厂模式
- C++设计模式 ==> 策略模式与简单工厂模式结合
- 简单工厂模式和策略模式的差别
- 外观模式Facade pattern
- 【学习笔记68】JavaScript的沙箱模式
- STM32的四种输出模式(转载)
- 设计模式(五)简单工厂模式+工厂方法模式
- 用实际例子详细探究OpenCV的轮廓检测函数findContours(),彻底搞清每个参数、每种模式的真正作用与含义
- 深入浅出工厂模式
- 设计模式: 策略模式+工厂模式+模板模式应用实践
- [转]工厂模式综述
- 观察者模式
- 云计算为企业数据中心带来新的租赁模式
- 设计模式学习之路-工厂模式
- 《软件建模与设计: UML、用例、模式和软件体系结构》一一2.9 部署图
- Head First设计模式-单例模式
- 设计模式(四)工厂方法模式
- 与策略模式工厂工作方式之间的差
- php实现工厂模式
- 简单工厂模式--加减乘除运算
- 从王者荣耀看设计模式(十四.抽象工厂模式)
- FactoryMethod工厂方法模式升级成AbstractFactory抽象工厂模式
- 工厂模式
- 状态模式
- Java-OO接口-DAO模式代码阅读及应用
- 简单工厂模式练习:简单工厂模式在农场系统中实现(IDEA演示、适合小白)