欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

工厂方法 Factory Method

程序员文章站 2022-06-15 14:15:18
...

父博文地址:设计模式 - Design Patterns


一、是什么?

作用

  1. 当我在超类中写操作产品的业务逻辑,而想把创建产品的行为推迟到子类时,我可以使用工厂方法。

  2. 将客户(超类中的业务代码)和具体创建对象的代码解耦。

行为

  • 工厂方法利用继承,把创建对象的工作推迟到子类(在子类覆盖工厂方法创建对象)。

工厂方法 Factory Method

二、实例

  1. 上面类图的实现

    Creator代码:

    public abstract class Creator {
    
        public Product bizMethod(String type) {
            Product product = createProduct(type);
            // product.othersMethod();
            // product.othersMethod();
            // product.othersMethod();
            return product;
        }
    
        protected abstract Product createProduct(String type);
    }

    Client代码:

    public class Client {
        public static void main(String[] args) {
            Creator creator = new ConcreteCreatorA();
            Product p = creator.bizMethod("A");
            System.out.println(p.getClass().getSimpleName());
        }
    }

三、问答

  1. 和简单工厂的区别?

    它们很类似,但用法不同。某一个具体的创建者子类看起来都很像是一个“简单工厂”。所以工厂方法的特点就是,这里有抽象类、有继承、依赖覆盖方法来创建对象。

  2. 工厂方法是否必须是abstract的?

    不是,可以定义一个有方法体的工厂方法来创建某个具体产品,这样即使没有子类也可以创建产品。(此时与简单工厂的区别就是简单工厂还可以是static的)。

  3. 所以依赖的原则?

    依赖倒置原则:高层不应该依赖于低层,高层和低层都应该依赖于抽象。

    Creator 不依赖于ConcreteProductA,Creator和ConcreteProductA都只依赖于Product。