• 工厂方法模式


    工厂方法模式(别名:虚拟构造):定义一个用于创建对象的接口,让其子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

    概述

    书上的例子个人觉得不是很好,因此这里我用Java集合里的一个例子来说明:

    Java集合中有两个接口Collections和Iterator。现在有一个LinkedList类(实现了Collections接口)的对象,我们想创建一个Iterator类的实例来对该对象进行遍历,Iterator接口有很多子类,这里我们无法确定具体实例化哪个子类(实际上,我们也不可能实例化任何Iterator的子类,因为它们都是Collections接口的子类的内部类),因此Collections接口定一个一个获取Iterator子类对象的方法iterator()。这种模式就是工厂方法模式。

    模式的结构

    抽象产品(Product):抽象类或者接口,比如上述的Iterator接口,负责定义具体产品的方法

    具体产品:实现Product接口的子类

    构造者(Creator):一个接口或抽象类定义一个称为工厂方法的抽象方法,该方法返回具体产品类的实例,比如上述的Collections接口,工厂方法为iterator()。

    具体构造者:实现Creator接口的子类,比如上述的LinkedList类,具体产品类作为LinkedList类的内部类而定义。

    工厂方法模式的优点

    • 工厂方法使用户不必知道它使用的对象是怎样被创建的,只需要知道该对象有哪些方法即可。比如通过LinkedList的iterator()方法获得Iterator对象,并不需要关心它怎么创建的。
    • 使用工厂方法使用户的代码和某个特定的类的子类的代码解耦。比如创建Iterator对象,并不需要显式的创建Iterator子类的实例。
  • 相关阅读:
    Symbol Commands
    Control Structures
    script.stub
    Lowest Common Ancestor of a Binary Search Tree
    Move Zeroes
    Odd Even Linked List
    ubuntu18.04系统安装及php7.2,apache2,mysql8,git,svn,composer,vs code 到安装 php 扩展配置php.ini 实现 laravel5.8 运行
    thinkphp3.2.3 自定义路由实践
    thinkphp3.2.3 自动验证 unique 出错的解决办法
    【重磅】中国集成电路产业基金投资版图详解
  • 原文地址:https://www.cnblogs.com/wuchaodzxx/p/6768706.html
Copyright © 2020-2023  润新知