设计模式------简单工厂模式
前言
简单工厂模式(Simple Factory)定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。因为在简单工厂模式中用于创建实例的方法是静态(static)方法,因此简单工厂模式又被称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。
一、UML图
工厂角色类(LightSimpleFactory):工厂类在客户端的直接控制下创建产品对象。
抽象产品角色(Light):定义简单工厂创建的对象的父类或他猛共同拥有的接口。可以是一个类、抽象类或接口。
具体产品角色(Bulb Light,Tube Light):定义工厂具体加工出的对象。
二、优点
- 工厂类包含必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的职责,而仅仅“消费”产品,简单工厂模式通过这种做法实现了对责任的分割。
三、缺点
- 当产品有复杂的多层等级结构时,工厂类只有自己,以不变应万变就是模式的缺点。因为工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。
- 同时,系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,有
可能造成工厂逻辑过于复杂。 - 另外,简单工厂模式通常使用静态工厂方法,这使得无法由子类继
承,造成工厂角色无法形成基于继承的等级结构。
四、本质
- 选择实现
五、应用场景
- 如果想要完全封装隔离具体实现,让外部只能通过接口来操作封装体,则可以选用简单工厂。让客户端通过工厂来获取相应的接口,而无需关心具体的实现。
- 如果想要把对外创建对象的职责集中管理和控制,可以选用简单工厂。一个简单工厂可以创建很多的、不相关的对象,可以把对外创建的职责集中到一个简单工厂来,从而实现集中管理控制
六、相关模式
1、简单工厂模式和抽象工厂模式
简单工厂是用来选择实现的,可以选择任意接口的实现,一个简单工厂可以有多个用于选择并创建对象的方法,多个方法创建的对象可以优关系也可以没有关系。
抽象工厂模式是用来选择产品簇的实现,也就是说一般抽象工厂里面有含多个用于选择并创建对象的方法,但这些方法所创建的对象之间通常是有关联的,这些被创建的对象通常是构成一个产品簇所需要的部件对象。
2、简单工厂和工厂方法模式
工厂方法模式的本质也是用来选择实现的,跟简单工厂的区别在于工厂方法是把选择具体实现的功能延迟到子类去实现。
如果把工厂方法模式中的选择实现放到父类直接去实现,那就等同于简单工厂