工厂模式的分类
简单工厂模式
简单工厂模式又称为静态工厂模式,实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。
其实就是将一个具体类的实例化交给一个静态工厂方法来执行,它不属于GOF的23种设计模式,但现实中却经常会用到,而且思想也非常简单。
简单工厂模式的结构
注意:看完三种工厂模式的精讲,我觉得是差不多的,思想也都差不多,主要是理解找个合适的地方的使用。
工厂角色(Creator) | 是简单工厂模式的核心,它负责实现创建所有具体产品类的实例。工厂类可以被外界直接调用,创建所需的产品对象。 |
抽象产品角色(Product) | 是所有具体产品角色的父类,它负责描述所有实例所共有的公共接口。 |
具体产品角色(Concrete Product) | 继承自抽象产品角色,一般为多个,是简单工厂模式的创建目标。工厂类返回的都是该 |
简单工厂模式的使用场景
只有一个工厂类,所以工厂类中创建的对象不能太多,否则工厂类的业务逻辑就太复杂了,不易维护和扩展。另外由于工厂类封装了对象的创建过程,所以客户端不关心对象的创建过程,只需要知道类型就好。
(1)需要创建的对象较少。
(2)客户端只需要知道所需对象的类型。
简单实例代码
- //定义抽象产品类:
- public abstract class Product {
- public abstract void use();
- }
-
- //定义具体产品类:
- public class ProductA extends Product {
- @Override
- public void use() {
- System.out.println("使用产品A");
- }
- }
-
- public class ProductB extends Product {
- @Override
- public void use() {
- System.out.println("使用产品B");
- }
- }
-
- //定义工厂类:
- public class ProductFactory {
- public static Product createProduct(String type) {
- if ("A".equals(type)) {
- return new ProductA();
- } else if ("B".equals(type)) {
- return new ProductB();
- } else {
- throw new IllegalArgumentException("产品类型不存在");
- }
- }
- }
-
- //调用客户端创建产品(实例):
- public class Client {
- public static void main(String[] args) {
- Product productA = ProductFactory.createProduct("A");
- Product productB = ProductFactory.createProduct("B");
-
- productA.use(); // 输出:使用产品A
- productB.use(); // 输出:使用产品B
- }
- }
其实有时候看代码能够更清楚的理解定义。