设计模式-抽象工厂模式实例(二)

追求适度,才能走向成功;人在顶峰,迈步就是下坡;身在低谷,抬足既是登高;弦,绷得太紧会断;人,思虑过度会疯;水至清无鱼,人至真无友,山至高无树;适度,不是中庸,而是一种明智的生活态度。

导读:本篇文章讲解 设计模式-抽象工厂模式实例(二),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

(1)案例背景:

计算机包含内存(RAM),CPU等硬件设备

设计模式-抽象工厂模式实例(二)

(2)实现步骤:

  • 根据题意,使用抽象工厂模式并画出类图,类图中应包含一个抽象工厂类AbstractFactory, PcFactory和MacFactory 两个具体工厂,CPU,RAM两个抽象产品类,PcCPU,MacCPU,PcRAM,MacRAM四个具体产品类。
  • 根据类图,实现上述类的具体代码以及用户类Client和辅助类XMLUtil以实现通过XML文件来制造不同的产品
  • 更改XML中的属性,观察用户类是否能使用不同的产品

(3)案例总结:

抽象工厂模式主要适用于:

  • 一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节
  • 系统中有多于一个的产品族,但每次只使用其中某一产品族
  • 属于同一个产品族的产品将在一起使用,这一约束必须在系统的设计中体现出来
  • 产品等级结构稳定,在设计完成之后不会向系统中增加新的产品等级结构或者删除已有的产品等级结构

二、实验平台:

JDK 1.8.0

IDEA 2020.01

三、主要实验内容及结果:

代码结构:

 设计模式-抽象工厂模式实例(二)

详细代码:

AbstractFactory.java:

import abstractFactory.abstractProduct.CPU;

import abstractFactory.abstractProduct.RAM;



public interface AbstractFactory {

    public CPU productCPU();

    public RAM productRAM();

}

MacFactory.java:
import abstractFactory.abstractFactory.AbstractFactory;

import abstractFactory.abstractProduct.CPU;

import abstractFactory.abstractProduct.RAM;

import abstractFactory.concreteProduct.MacCPU;

import abstractFactory.concreteProduct.MacRAM;



public class MacFactory implements AbstractFactory {

    public CPU productCPU(){

        return new MacCPU();

    }



    public RAM productRAM(){

        return new MacRAM();

    }

}

 

 
PcFactory.java:
import abstractFactory.abstractFactory.AbstractFactory;

import abstractFactory.abstractProduct.CPU;

import abstractFactory.abstractProduct.RAM;

import abstractFactory.concreteProduct.PcCPU;

import abstractFactory.concreteProduct.PcRAM;



public class PcFactory implements AbstractFactory {

    public CPU productCPU(){

        return new PcCPU();

    }



    public RAM productRAM(){

        return new PcRAM();

    }

}

 
 
 
CPU.java:
public interface CPU  {

    public void product();



}

 
 
RAM.java:
public interface RAM {

    public void product();

}

 

 
 
MacCPU
import abstractFactory.abstractProduct.CPU;



public class MacCPU implements CPU {

    public void product(){

        System.out.println("MacCPU is producting....");

    }

}

 

 
MacRAM
import abstractFactory.abstractProduct.RAM;



public class MacRAM implements RAM {

    public void product(){

        System.out.println("MacRAM is producting...");

    }

}

 
 
PcCPU
import abstractFactory.abstractProduct.CPU;



public class PcCPU implements CPU {

    public void product(){

        System.out.println("PcCPU is producting...");

    }

}

 
 
PcRAM
import abstractFactory.abstractProduct.RAM;



public class PcRAM implements RAM {

    public void product(){

        System.out.println("PcRAM is producting...");

    }

}

 

 
XMLUtil
import org.w3c.dom.*;

import javax.xml.parsers.*;

import org.xml.sax.SAXException;

import java.io.*;



public class XMLUtil {

    public static Object getBean(){

        try {

            //创建文档对象

            DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();

            DocumentBuilder builder = dFactory.newDocumentBuilder();

            Document doc;

            doc = builder.parse(new File("src/abstractFactory/utils/config.xml"));

            //获取包含支付方式名称的文本节点

            NodeList nl = doc.getElementsByTagName("className");

            Node classNode=nl.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;

        }

    }

}

 
 
 

config.xml:

<?xml version="1.0" ?>

<config>

    <className>abstractFactory.concreteFactory.MacFactory</className>

</config>


Client
package abstractFactory.Client;



import abstractFactory.abstractFactory.AbstractFactory;

import abstractFactory.abstractProduct.CPU;

import abstractFactory.abstractProduct.RAM;

import abstractFactory.utils.XMLUtil;



public class Client {

    public static void main(String[] args) {

        System.out.println("详细设计实验报告  1904班白旭君  2019005368");



        try {

            AbstractFactory factory;

            CPU cpu;

            RAM ram;

            factory = (AbstractFactory) XMLUtil.getBean();

            cpu = factory.productCPU();

            ram = factory.productRAM();

            cpu.product();

            ram.product();

        }catch (Exception e){

            System.out.println(e.getMessage());

        }

    }

}

实验结果:

设计模式-抽象工厂模式实例(二)

设计模式-抽象工厂模式实例(二)

 设计模式-抽象工厂模式实例(二)

 设计模式-抽象工厂模式实例(二)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/128204.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!