美文网首页设计模式
创建型模式——3工厂方法模式

创建型模式——3工厂方法模式

作者: li_荔枝 | 来源:发表于2019-09-25 10:28 被阅读0次

声明:设计模式系列笔记摘自http://c.biancheng.net/view/1317.html

1、定义:工厂方法(FactoryMethod)模式的定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。

2、简单工厂模式:我们把被创建的对象称为“产品”,把创建产品的对象称为“工厂”。如果要创建的产品不多,只要一个工厂类就可以完成,这种模式叫“简单工厂模式”,它不属于 GoF 的 23 种经典设计模式,它的缺点是增加新产品时会违背“开闭原则”。

3.1工厂方法模式优点:
a.用户知需要知道具体工厂名称就可以得到要的产品,而不需要知道产品的具体创建过程。
b.系统在增加新的产品时,只需增加新的具体产品类和对应的具体工厂类,无需对原来的工厂进行修改,满足开闭原则。

3.2工厂方法模式的缺点:
每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类,这增加了系统的复杂度。

4、工厂方法模式的主要角色如下。
a.抽象工厂(Abstract Factory):提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法 newProduct() 来创建产品。
b.具体工厂(ConcreteFactory):主要是实现抽象工厂中的抽象方法,完成具体产品的创建。
c.抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能。
d.具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间一一对应。


image.png

5、例子

//抽象工厂
public abstract class Factory {
    public abstract Product manufacture();
}
/**
 * @author lizhibiao
 *具体工厂A用于生产产品A
 */
public class FactoryA extends Factory{
    public Product manufacture(){
        return new PruductA();
    }
}
/**
 * @author lizhibiao
 *具体工厂B用于生产产品B
 */
public class FactoryB extends Factory {

    @Override
    public Product manufacture() {
        // TODO Auto-generated method stub
        return new ProductB();
    }
}
//抽象产品
public abstract class Product {
    public abstract void show();
}
//具体产品A
public class PruductA extends Product {

    @Override
    public void show() {
        // TODO Auto-generated method stub
        System.out.println("生产出了产品A");
    }

}
//具体产品B
public class PruductB extends Product {

    @Override
    public void show() {
        // TODO Auto-generated method stub
        System.out.println("生产出了产品B");
    }

}

测试工厂方法模式

public class FactoryTest {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //客户需要产品A,不需要知道产品A的创建过程
        FactoryA factoryA = new FactoryA();
        Product productA = factoryA.manufacture();
        productA.show();
        //客户需要产品B
        FactoryB factoryB = new FactoryB();
        Product productB = factoryB.manufacture();
        productB.show();
    }
}

6、应用场景:
·客户只知道创建产品的工厂名,而不知道具体的产品名。如 TCL 电视工厂、海信电视工厂等。
·创建对象的任务由多个具体子工厂中的某一个完成,而抽象工厂只提供创建产品的接口。
·客户不关心创建产品的细节,只关心产品的品牌。

相关文章

  • 设计模式(1) 工厂方法模式

    创建型模式 简单工厂模式 工厂方法模式IOC与工厂方法模式的结合泛型工厂委托工厂 创建型模式 创建型模式可以隔离客...

  • 二十三种设计模式

    参考地址 一、创建型 1、单例模式 2、简单工厂 3、抽象工厂 4、工厂方法模式 5、模版方法模式 知道名字的模式...

  • Kotlin(八)kotlin设计模式-创建型

    创建型模式 - 工厂 Kotlin里面几种主流创建型设计模式:工厂方法模式,抽象工厂模式,构建者模式 8.1 伴生...

  • 工厂方法模式

    什么是工厂方法模式 工厂方法模式又称为工厂模式,属于创建型设计模式。工厂方法模式定义了一个创建对象的接口,但由子类...

  • 设计模式

    设计模式分为 3 大类型共 23 种:创建型:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型:...

  • 简单工厂模式

    工厂方法模式(Factory Pattern)是创建型设计模式之一。 一、定义 简单工厂模式又称为静态方法工厂模式...

  • PHP常用设计模式

    # 创建型 单例模式 工厂模式 工厂抽象模式 原型模式 建造者模式 # 结构型 # 行为型 # 3.注册模式 # ...

  • 2021-11-16 - 学习记录

    设计模式学习:创建型:工厂(工厂方法,抽象工厂),建造者,单例,原型 设计模式:工厂模式 简单工厂 工厂方法 抽象工厂

  • JavaScript 23种设计模式

    创建型: 抽象工厂模式(Abstract Factory) 构建者模式(Builder) 工厂方法模式(Facto...

  • 设计模式[2]-工厂方法模式-Factory Method Pa

    1. 工厂方法模式简介 工厂方法模式(Factory Method Pattern)是创建型的设计模式,和简单工厂...

网友评论

    本文标题:创建型模式——3工厂方法模式

    本文链接:https://www.haomeiwen.com/subject/ohynyctx.html