参考资料:
深入理解设计模式(二):简单工厂模式
C#设计模式(2)——简单工厂模式
1. 什么是简单工厂模式
简单工厂模式又称为静态工厂模式。实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。简单工厂模式的创建目标,所有的创建对象都是充当这个角色的某个具体类的实例。
其实就是将一个具体类的实体化交给一个静态工厂方法来执行。它不属于GOF的3种设计模,但却经常被使用
2. 简单工厂模式的结构
- 工厂角色:它负责实现创建所有具体产品类的实现。工厂类可以被外界直接调用,创建所需的产品对象
- 抽象产品的角色:是所有具体产品的父类,它负责描述所有实例所共有的公共接口
- 具体产品角色:继承自抽象产品角色,一般为多个,是简单工厂模式的创建目标。工厂类返回的都是该角色的某一具体产品。
3.简单工厂模式的应用场景
- 创建的对象少,不会造成工厂方法中的业务逻辑太过复杂
- 客户端只需传入工厂方法参数,无需知道对象如何创建
4. 简单工厂模式的优缺点
优点:
简单工厂模式解决了客户端直接依赖于具体对象的问题,客户端可以消除直接创建对象的责任,而仅仅是消费产品。该模式实现了对责任的分割
缺点:
职责过重,一但程序出错,整个系统都不能运行
它所能创建的类只能是事先考虑好的,如果需要添加新类,就需要改变工厂类
由于工厂类集中了所有实例的创建逻辑,违反了开闭原则,将全部创建逻辑集中到了一个工厂类中
由于使用了静态工厂的方法,造成工厂角色无法形成基于继承的等级结构
5. 简单工厂模式的实现
public class ApplePhonFactory
{
public static ApplePhone CreatePhone(string model)
{
ApplePhone ap = null;
switch (model)
{
case "IPhoneX":
ap = new IPhoneX();
break;
case "IPhoneXS":
ap = new IPhoneXS();
break;
case "IPhoneXR":
ap = new IPhoneXR();
break;
default:
break;
}
return ap;
}
}
public abstract class ApplePhone
{
public abstract void GetSize();
}
public class IPhoneX : ApplePhone
{
public override void GetSize()
{
Console.WriteLine("IPhoneX");
}
}
public class IPhoneXS : ApplePhone
{
public override void GetSize()
{
Console.WriteLine("IPhoneXS");
}
}
public class IPhoneXR : ApplePhone
{
public override void GetSize()
{
Console.WriteLine("IPhoneXR");
}
}