博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA设计模式之【抽象工厂模式】
阅读量:6858 次
发布时间:2019-06-26

本文共 3192 字,大约阅读时间需要 10 分钟。

422101-20160927210957485-220665994.png

1.产品接口,电视和空调

public interface Television // 电视接口{    public void play();}
public interface AirConditioner // 空调{    public void changeTemperature();}

2.电子工厂接口,生产电视和空调

public interface EFactory //E工厂接口{    public Television produceTelevision(); // 生产电视    public AirConditioner produceAirConditioner(); // 生产空调}

3.具体工厂

海尔工厂生产海尔电视和海尔空调

public class HaierFactory implements EFactory // 海尔工厂{    public Television produceTelevision()    {        return new HaierTelevision();    }        public AirConditioner produceAirConditioner()    {        return new HairAirConditioner();    }}

TCL工厂生产TCL电视和TCL空调

public class TCLFactory implements EFactory // TCL工厂{    public Television produceTelevision()    {        return new TCLTelevision();    }        public AirConditioner produceAirConditioner()    {        return new TCLAirConditioner();    }}

4.具体产品,海尔电视,海尔空调

public class HaierTelevision implements Television  // 海尔电视{    public void play()    {        System.out.println("海尔电视机播放中......");    }}
public class HairAirConditioner implements AirConditioner // 海尔空调{    public void changeTemperature()    {        System.out.println("海尔空调温度改变中......");    }}

TCL电视,TCL空调

public class TCLTelevision implements Television // TCL电视{    public void play()    {        System.out.println("TCL电视机播放中......");    }}
public class TCLAirConditioner implements AirConditioner // TCL空调{    public void changeTemperature()    {        System.out.println("TCL空调温度改变中......");    }}

5.配置与获取配置类

TCLFactory
import javax.xml.parsers.*;import org.w3c.dom.*;import org.xml.sax.SAXException;import java.io.*;public class XMLUtil{//该方法用于从XML配置文件中提取具体类类名,并返回一个实例对象    public static Object getBean()    {        try        {            //创建文档对象            DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();            DocumentBuilder builder = dFactory.newDocumentBuilder();            Document doc;                                       doc = builder.parse(new File("./src/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;            }        }}

6.客户端调用

public class Client{    public static void main(String args[])    {         try         {            EFactory factory; // 电子工厂            Television tv; // TV            AirConditioner ac; // 空调            factory=(EFactory)XMLUtil.getBean();                // factory = new HaierFactory();                // factory = new TCLFactory();            tv=factory.produceTelevision(); // 工厂生产电视            tv.play(); // 电视播放            ac=factory.produceAirConditioner(); // 工厂生产空调            ac.changeTemperature(); // 空调调节温度         }         catch(Exception e)         {            System.out.println(e.getMessage());         }    }}

结果:

TCL电视机播放中......

TCL空调温度改变中......

类图关系如下,

422101-20160927214111438-1818612535.jpg

转载地址:http://wwxyl.baihongyu.com/

你可能感兴趣的文章
非常详尽的 Shiro 架构解析
查看>>
负载均衡获得真实源IP的6种方法 【转】
查看>>
Windows远程协助相关汇总
查看>>
MySql(十六):MySql架构设计——MySQL Cluster
查看>>
HTML5手机页面里面如何把长按复制避免
查看>>
模拟Spring中applicationContext.xml配置文件初始化bean的过程
查看>>
Signal Shading Theory?
查看>>
[转]ASP.NET HttpModule for handling session end with StateServer
查看>>
Creating and Using Static Libraries for iPhone using Xcode 4.3
查看>>
OkHttp3几个简单的例子和在子线程更新UI线程的方法
查看>>
Flash lite for Windows Mobile?!
查看>>
(原創) DE2_NIOS_Lite 1.2 (SOC) (Nios II) (SOPC Builder) (DE2)
查看>>
【吵架不能吵半截】
查看>>
编程获取神鬼传奇客户端安装路径
查看>>
Win32 SDK(对话框程序)
查看>>
SQL 分页 SQL SERVER 2008
查看>>
Unity3D 记第一次面试
查看>>
Log4net配置之Winform项目
查看>>
智能车学习(十五)——K60野火2013版例程
查看>>
【T02】理解子网和CIDR的概念
查看>>