工厂方法 Factory Method

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


一、是什么?

作用

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

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

行为

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

工厂方法 Factory Method_第1张图片

二、实例

  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。


  • 1.1.1 简单工厂 SimpleFactory

  • 1.2 抽象工厂 AbstractFactory

你可能感兴趣的:(Design,Pattern)