工厂方法 Factory Method

Posted 有且仅有

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了工厂方法 Factory Method相关的知识,希望对你有一定的参考价值。

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


一、是什么?

作用

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

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

行为

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

二、实例

  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。


以上是关于工厂方法 Factory Method的主要内容,如果未能解决你的问题,请参考以下文章

创建型 — 工厂方法模式(Factory Method)

Factory Method 工厂方法模式

设计模式二: 工厂方法(Factory Method)

工厂方法模式(FACTORY METHOD)

Factory Method工厂方法

工厂方法 Factory Method