完整案例分析再加知识整合——艾特工厂方法模式,超详细的

栏目: IT技术 · 发布时间: 4年前

内容简介:工厂方法模式包含如下角色:Java反射机制的应用工厂方法模式优点
  • 工厂方法模式(Factory Method Pattern)简称工厂模式,也叫 虚拟构造器(Virtual Constructor)模式 或者 多态工厂(Polymorphic Factory)模式 ,它属于类创建型模式。
  • 在工厂方法模式中, 工厂父类负责定义创建产品对象的公共接口 ,而 工厂子类则负责生成具体的产品对象 ,这样做的目的是 将产品类的实例化操作延迟到工厂子类 中完成,即 通过工厂子类来确定究竟应该实例化哪一个具体产品类

模式结构与分析

模式结构

完整案例分析再加知识整合——艾特工厂方法模式,超详细的

工厂方法模式包含如下角色:

  • Product:抽象产品
  • ConcreteProduct:具体产品
  • Factory:抽象工厂
  • ConcreteFactory:具体工厂

模式分析

  • 工厂方法模式是 简单工厂模式的进一步抽象和推广
  • 工厂方法模式保持了简单工厂模式的优点,并克服了它的缺点
  • 核心的工厂类不再负责所有产品的创建,而是 将具体创建工作交给其子类去完成
  • 可以允许系统 在不修改工厂角色的情况下引进新产品
  • 增加具体产品-->增加具体工厂, 符合“开闭原则”

Java反射机制的应用

完整案例分析再加知识整合——艾特工厂方法模式,超详细的

配置文件的应用

完整案例分析再加知识整合——艾特工厂方法模式,超详细的

工具类XMLUtil代码片段

完整案例分析再加知识整合——艾特工厂方法模式,超详细的

模式实例与解析

模式实例

电视机工厂:实例说明

  • 将原有的电视机工厂进行分割,为每种品牌的电视机提供一个子工厂,海尔工厂专门负责生产海尔电视机,海信工厂专门负责生产海信电视机,如果需要生产TCL电视机或创维电视机,只需要对应增加一个新的TCL工厂或创维工厂即可,原有的工厂无需做任何修改,使得整个系统具有更好的灵活性和可扩展性。

电视机工厂:参考类图

完整案例分析再加知识整合——艾特工厂方法模式,超详细的

电视机工厂:参考代码

代码结构:

完整案例分析再加知识整合——艾特工厂方法模式,超详细的

TV接口

package factorymethod;

public interface TV {
    public void play();
}

HaierTV类

package factorymethod;

public class HaierTV implements TV {
    @Override
    public void play() {
        System.out.println("海尔电视机播放中···");
    }
}

HisenseTV类

package factorymethod;

public class HisenseTV implements TV {
    @Override
    public void play() {
        System.out.println("海信电视机播放中···");
    }
}

TVFactory接口

package factorymethod;

public interface TVFactory {
    public TV produceTV();
}

HaierTVFactory类

package factorymethod;

public class HaierTVFactory implements TVFactory {
    @Override
    public TV produceTV() {
        System.out.println("海尔电视机工厂生产海尔电视机!");
        return new HaierTV();
    }
}

HisenseTVFactory类

package factorymethod;

public class HisenseTVFactory implements TVFactory {
    @Override
    public TV produceTV() {
        System.out.println("海信电视机工厂生产海信电视机!");
        return new HisenseTV();
    }
}

FactoryMethodconfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <className>factorymethod.HisenseTVFactory</className>

    <!--<className>factorymethod.HaierTVFactory</className>-->
</config>

XMLUtil类

package factorymethod;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.File;

public class XMLUtil {

    //该方法用于从XML配置文件中提取具体类类名,并返回一个实例对象
    public static Object getBean(){
        try {
            //创建文档对象
            DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = dFactory.newDocumentBuilder();
            Document doc;

            doc = builder.parse(new File("D:\\MyNewWorld\\Study_JAVA\\MyHome\\Write_java\\My_Maven\\src\\main\\resources\\FactoryMethodconfig.xml"));


            //获取包含类名的文本节点
            NodeList n1 = doc.getElementsByTagName("className");
            Node classNode = n1.item(0).getFirstChild();

            String cName = classNode.getNodeValue();

            //通过类名生成实例对象并将其返回
            Class c = Class.forName(cName);
            Object obj = c.newInstance();
            return obj;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

Client类

package factorymethod;

public class Client {
    public static void main(String[] args) {
        try {
            TV tv;
            TVFactory factory;
            factory = (TVFactory) XMLUtil.getBean();
            tv = factory.produceTV();
            tv.play();
        }catch (Exception e){
            System.out.println(e.getMessage());
        }
    }
}

运行结果

完整案例分析再加知识整合——艾特工厂方法模式,超详细的 完整案例分析再加知识整合——艾特工厂方法模式,超详细的 完整案例分析再加知识整合——艾特工厂方法模式,超详细的 完整案例分析再加知识整合——艾特工厂方法模式,超详细的

模式效果与应用

工厂方法模式优点

  • 工厂方法用来创建客户所需要的产品,同时还 向客户隐藏了哪种具体产品类将被实例化这一细节
  • 能够 让工厂自主确定创建何种产品对象 ,而如何创建这个对象的细节则完全封装在具体工厂内部。
  • 在系统中加入新产品时, 完全符合开闭原则

工厂方法模式缺点

  • 系统中 类的个数将成对增加 ,在一定程度上增加了系统的复杂度,会给系统带来一些额外的开销。
  • 增加了系统的抽象性和理解难度

在以下情况下可以使用工厂方法模式:

  • 客户端不知道它所需要的对象的类 (客户端不需要知道具体产品类的类名,只需要知道所对应的工厂即可,具体产品对象由具体工厂类创建)
  • 抽象工厂类通过其子类来指定创建哪个对象

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Numerical Methods and Methods of Approximation in Science and En

Numerical Methods and Methods of Approximation in Science and En

Karan Surana / CRC Press / 2018-10-31

ABOUT THIS BOOK Numerical Methods and Methods of Approximation in Science and Engineering prepares students and other readers for advanced studies involving applied numerical and computational anal......一起来看看 《Numerical Methods and Methods of Approximation in Science and En》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具