工厂设计模式
-
工厂方法模式的介绍
动机(Motivate)
在软件系统的构建过程中,经常面临着“某个对象”的创建工作:由于需求的变化,这个对象(的具体实现)经常面临着剧烈的变化,但是它却拥有比较稳定的接口。
如何应对这种变化?如何提供一种“封装机制”来隔离出“这个易变对象”的变化,从而保持系统中“其他依赖对象的对象”不随着需求改变而改变?
-
模式的组成
可以看出,在工厂方法模式的结构有以下角色: (1)、抽象工厂角色(Creator): 充当抽象工厂角色,定义工厂类所具有的基本的操作,任何具体工厂都必须继承该抽象类。 (2)、具体工厂角色(ConcreteCreator):充当具体工厂角色,该类必须继承抽象工厂角色,实现抽象工厂定义的方法,用来创建具体产品。 (3)、抽象产品角色(Product):充当抽象产品角色,定义了产品类型所有具有的基本操作,具体产品必须继承该抽象类。 (4)、具体产品角色(ConcreteProduct):充当具体产品角色,实现抽象产品类对定义的抽象方法,由具体工厂类创建,它们之间有一一对应的关系。
-
设计模式原则
工厂设计模式:
遵循了OCP原则,中文是【开放关闭原则】,对增加代码开发,对修改代码关闭,。 -
具体的代码
namespace DesignPattern
{
/// <summary>
/// 汽车抽象类
/// </summary>
public abstract class Car
{
public abstract void print();
}
/// <summary>
/// 生产宝马这辆车
/// </summary>
public class BMWCar : Car
{
public override void print()
{
Console.WriteLine("生产宝马汽车");
}
}
/// <summary>
/// 生产保时捷这辆车
/// </summary>
public class PorscheCar : Car
{
public override void print()
{
Console.WriteLine("生产保时捷汽车");
}
}
/// <summary>
/// 抽象工厂类
/// </summary>
public abstract class Creator
{
public abstract Car CreateCarFactory();
}
/// <summary>
/// 宝马工厂类
/// </summary>
public class BMWFactory : Creator
{
public override Car CreateCarFactory()
{
return new BMWCar();
}
}
/// <summary>
/// 客户端调用
/// </summary>
public class FactoryMode
{
/*使用工厂方法实现的系统,如果系统需要添加新产品时,我们可以利用多态性来完成系统的扩展,
对于抽象工厂类和具体工厂中的代码都不需要做任何改动。*/
public static void Main(string[] args)
{
Creator bmwFactory = new BMWFactory();
Car bmwCar = bmwFactory.CreateCarFactory();
bmwCar.print();
Console.ReadKey();
}
}
}
5.优缺点
有点:扩展开放,修改关闭
缺点: 一个工厂只做一种产品,显示生活中很少,抽象工厂可以解决这个问题