定义
简单工厂模式 (Simple Factory Pattern):定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。
角色
客户端:只需调用工厂类的工厂方法并传入相应的参数即可得到一个产品对象
工厂类:提供一个工厂类用于创建各种产品,在工厂类中提供一个创建产品的工厂方法,该方法可以根据所传入参数的不同创建不同的具体产品对象
具体产品类:将需要创建的各种不同产品对象的相关代码封装到具体产品类中
抽象产品类:将具体产品类公共的代码进行抽象和提取后封装在一个抽象产品类中
优点
实现了对象创建和使用的分离 客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可
缺点
增加系统中类的个数(引入了新的工厂类),增加了系统的复杂度和理解难度 工厂类集中了所有产品的创建逻辑,职责过重,一旦不能正常工作,整个系统都要受到影响 由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构,工厂类不能得到很好地扩展 系统扩展困难,一旦添加新产品不得不修改工厂逻辑
适用场景
简单工厂一定要保持简单,否则就不要用简单工厂。 客户端只知道传入工厂类的参数,对于如何创建对象并不关心
对象的创建过程/实例化准备工作复杂,需要初始化很多参数、查询数据库等 类本身有很多子类,这些类的创建过程在业务中容易发生改变。
案例
设计一个可以创建不同几何形状(Shape)(例如圆形(Cicle),矩形(Rectangle),三角形(Triangle))的绘图工具类,每个几何图形均具有绘制方法draw()和擦出方法erase(),要求在绘制不支持的几何图形时,抛出一个UnsupportShapeException异常。请选择一种合适的设计模式来设计该工具类,画出类图并模拟实现。