JAVA设计模式之【抽象工厂模式】
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.配置与获取配置类
<?xml version="1.0"?>
<config>
<className>TCLFactory</className>
</config>
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空调温度改变中......
类图关系如下,
JAVA设计模式之【抽象工厂模式】的更多相关文章
- Java 设计模式之抽象工厂模式(三)
原文地址:Java 设计模式之抽象工厂模式(三) 博客地址:http://www.extlight.com 一.前言 上篇文章 <Java 设计模式之工厂模式(二)>,介绍了简单工厂模式和 ...
- java设计模式之抽象工厂模式
上一篇文章(http://www.cnblogs.com/liaoweipeng/p/5768197.html)讲了简单工厂模式,但是简单工厂模式存在一定的问题,如果想要拓展程序,必须对工厂类进行修改 ...
- Java设计模式系列-抽象工厂模式
原创文章,转载请标注出处:https://www.cnblogs.com/V1haoge/p/10755412.html 一.概述 抽象工厂模式是对工厂方法模式的再升级,但是二者面对的场景稍显差别. ...
- java设计模式(三)--抽象工厂模式
转载:http://zz563143188.iteye.com/blog/1847029 前面的工厂方法模式虽然清晰,但还是感觉有些繁琐,通常使用的还是抽象工厂模式. 工厂方法模式有一个问题就是,类的 ...
- Java 设计模式之抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在抽 ...
- [java] java 设计模式(2):抽象工厂模式(Abstract Factory)
工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这 ...
- Java设计模式(3)——抽象工厂模式
抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的.抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象. 一.产品族和产品等级结构 为 ...
- java设计模式之抽象工厂模式学习
工厂模式有个问题就是,类的创建依赖工厂.要想增加一个工厂类,就要修改原来的代码,这违背了闭包原则.所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这样一旦需要增加新的 ...
- Java设计模式之【工厂模式】(简单工厂模式,工厂方法模式,抽象工厂模式)
Java设计模式之[工厂模式](简单工厂模式,工厂方法模式,抽象工厂模式) 工厂模式出现的原因 在java中,创建一个对象最简单的方法就是使用new关键字.但在一些复杂的业务逻辑中,创建一个对象不只需 ...
- 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
原文:乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factor ...
随机推荐
- [工作积累] Google Play Game SDK details
https://developers.google.com/games/services/cpp/api/structgpg_1_1AndroidSupport For apps which targ ...
- 驱动笔记 - ioctl
#include <linux/ioctl.h> 定义命令 _IO(type,nr) 没有参数的命令 _IOR(type,nr,datatype) 从驱动中读数据 _IOW(type,nr ...
- Appstore提交 被拒绝
Reasons 16.1: Apps that present excessively objectionable or crude content will be rejected 16.1 We ...
- JobClient学习------作业提交与初始化
public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); ...
- HDU5008 Boring String Problem(后缀数组)
练习一下字符串,做一下这道题. 首先是关于一个字符串有多少不同子串的问题,串由小到大排起序来应该是按照sa[i]的顺序排出来的产生的. 好像abbacd,排序出来的后缀是这样的 1---abbacd ...
- win7建wifi 热点,附wifi小工具
首先申明:1)以下操作均在管理员身份下操作,其他用户下请亲测. 2)具备无线网卡,并且已经安装好了驱动. 1.打开命令行:输入netsh wlan set hostedn ...
- DB2常用函数:字符串函数
VALUE函数 语法:VALUE(EXPRESSION1,EXPRESSION2) VALUE函数是用返回一个非空的值,当其第一个参数非空,直接返回该参数的值,如果第一个参数为空,则返回第一个参数的值 ...
- (9)nehe教程3--添加颜色
添加颜色: 作为第二课的扩展,我将叫你如何使用颜色.你将理解两种着色模式,在左图中,三角形用的是光滑着色,四边形用的是平面着色. 上一课中我教给您三角形和四边形的绘制方法.这一课我将教您给三角形和四边 ...
- 03 - Oracle文件概述
构成Oracle数据库的8种文件类型. 可以把这些文件分成以下几类. Instance相关 参数文件 parameter, initOra file, spfile 跟踪文件 trace file 警 ...
- lintcode:字符串置换
题目 给定两个字符串,请设计一个方法来判定其中一个字符串是否为另一个字符串的置换. 置换的意思是,通过改变顺序可以使得两个字符串相等. 样例 "abc" 为 "cba&q ...