美文网首页23天学习23种设计模式
23天学习23种设计模式——工厂方法模式

23天学习23种设计模式——工厂方法模式

作者: soberbad | 来源:发表于2018-06-24 09:03 被阅读0次

前言

在生活中,相信大家对工厂也不会陌生。就拿大家经常用的手机举例,不管是苹果,三星,小米还是华为。都是由各家的工厂或者代工厂生产出来的。经过线上或者线下的销售途径到达我们消费者手中。作为消费者,并不需要也不关心手机是如何生产出来的,因为这些都是各家工厂负责的。而在程序设计中,同样有类似的设计模式——工厂方法模式。

是什么(什么是工厂方法模式)

工厂方法模式(Factory Method Pattern)是一种对象创建型设计模式(又叫做工厂模式,虚拟构造器模式或多态工厂模式)。它定义一个用于创建对象的接口,然后让子类决定实例化哪个类。工厂方法模式让一个类的实例化延迟到了它的子类。

为什么 (为什么要用工厂方法模式)

想得到某些类的对象,又无需知道创建类的具体类别。也不知道它的创建以及初始化过程。(在维基百科中,原文是这么解释的: to deal with the problem of creating objects without having to specify the exact class of the object that will be created.)

怎么用 (怎么实现工厂方法模式)

上图是工厂方法模式的UML结构图,下面通过一个表格分别解释每个角色的作用:

角色 作用
Product(抽象产品) 定义产品的接口,是产品对象的父类
ConcreteProduct(具体产品) 实现抽象产品接口,具体产品由具体工厂创建,并与其一一对应
Factory(抽象工厂) 声明了工厂方法,返回一个产品,是工厂对象的父类
ConcreteFactory(具体工厂) 抽象工厂的子类,实现了工厂方法,并由客户端调用,返回一个具体产品的对象

就以前面提到的手机举例:

  • 首先我们定义抽象产品,也就是抽象手机接口:
public interface Phone {

    String brand();

    void call(String from,String to);


}

  • 然后我们定义抽象工厂,也就是抽象手机工厂类:
public interface PhoneFactory {

    Phone createPhone();

}

  • 分别实现具体产品类,和具体工厂类。也就是具体的手机和手机厂商。这里以苹果和小米举例。
public class ApplePhone implements Phone {
    @Override
    public String brand() {
        return "Apple";
    }

    @Override
    public void call(String from, String to) {
        System.out.println(String.format("苹果手机正在拨打电话,本机号码为:%s,被叫号码为:%s",from,to));
    }
}

public class AppleFactory implements PhoneFactory {
    @Override
    public Phone createPhone() {
        AppleiPhone phone = new AppleiPhone();
        //初始化工作:如组装
        return phone;
    }
}


public class XiaoMiPhone implements Phone {
    @Override
    public String brand() {
        return "Xiaomi";
    }

    @Override
    public void call(String from, String to) {
        System.out.println(String.format("小米手机正在拨打电话,本机号码为:%s,被叫号码为:%s",from,to));
    }
}

public class XiaomiFactory implements PhoneFactory {
    @Override
    public Phone createPhone() {
        XiaoMiPhone phone = new XiaoMiPhone();
        //初始化工作:如组装
        return phone;
    }
}


  • 最后我们通过客户端类,来模拟手机从工厂到消费者手中并被消费者使用的过程(工厂到销售商再到消费者的销售流程省略)。

public class Client {

    public static void main(String[]args) {

        PhoneFactory factory = new AppleFactory();
        Phone phone = factory.createPhone();

        System.out.println(phone.brand());

        String myPhoneNumber = "13812340000";
        String myFriendPhoneNumber = "13912348888";
        phone.call(myPhoneNumber, myFriendPhoneNumber);

        factory = new XiaomiFactory();
        Phone xiaoMiPhone = factory.createPhone();

        System.out.println(xiaoMiPhone.brand());
        xiaoMiPhone.call(myPhoneNumber,myFriendPhoneNumber);
    }


}

运行结果

运行结果

在Android源码中的应用

JDK中的Collection集合类中,就有工厂方法模式的应用。如下图所示:比如我们经常用的Iterator。Iterator就是抽象产品,Itr就是具体产品。Iterable是抽象工厂,ArrayList就是具体工厂。

Iterator
ArrayList实现Iterable接口返回Iterator类

相关文章

  • 2021-11-16 - 学习记录

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

  • 设计模式-抽象工厂模式

    前面我们学习了了简单工厂模式和工厂方法模式,今天我们来学习设计模式中最后的一种工厂模式——抽象工厂模式(Abstr...

  • 工厂模式

    工厂模式 就是工厂---生产-->产品 在设计模式中,分为 简单工厂模式, 工厂方法模式,抽象工厂模式. 工厂模式...

  • PHP-浅谈单例模式和工厂模式

    PHP中常用的设计模式有单例模式、工厂模式(简单工厂模式、工厂方法模式和抽象工厂方法模式)、适配模式、策略模式。 ...

  • 设计模式-工厂模式

    设计模式1 设计模式2 工厂模式 工厂模式可简单的分为三类:简单工厂,工厂方法,抽象工厂 简单工厂模式 定义 简单...

  • 设计模式之工厂方法模式(创建型)

    一、模式定义 工厂方法模式:又称工厂模式,也叫虚拟构造器模式,属于构建型设计模式,工厂方法模式是在简单工厂模式上进...

  • spring 设计模式篇(前)

    设计模式俗称:套路 一、spring常见设计模式 (23种设计模式) 创建型:工厂方法模式、抽象工厂模式、建造者...

  • 设计模式系列-简单工厂模式

    JAVA设计模式系列: 单例模式 观察者模式 模板方法模式 简单工厂模式 定义 简单工厂模式又叫做静态工厂方法模式...

  • 简单工厂模式

    Android进阶之设计模式 简单工厂模式 简单工厂模式(又叫作静态工厂方法模式), 其属于创建型设计模式,但并不...

  • 设计模式之简单工厂、工厂方法、抽象工厂

    设计模式之简单工厂、工厂方法、抽象工厂 什么是设计模式? 设计模式(Design pattern)代表了最佳的实践...

网友评论

    本文标题:23天学习23种设计模式——工厂方法模式

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