栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

GoF设计模式之抽象工厂模式及其实例

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

GoF设计模式之抽象工厂模式及其实例

定义:

产品等级结构:产品等级结构即产品的继承结构,例如一个抽象类是电视机,其子类有海尔电视机、海信电视机、TCL电视机,则抽象电视机不具体品牌的电视机之间构成了一个产品等级结构,抽象电视机是父类,而具体品牌的电视机是其子类。

产品族:在抽象工厂模式中,产品族是指由同一个工厂生产的,位于丌同产品等级结构中的一组产品,例如海尔电器工厂生产的海尔电视机、海尔电冰箱,海尔电视机位于电视机产品等级结构中,海尔电冰箱位于电冰箱产品等级结构中。

抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。

优点:

隔离了具体类的生成,使得客户端并不需要知道什么被创建

当一个产品族中的多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族中的对象

增加新的产品族很方便,无须修改已有系统,符合开闭原则

缺点:

增加新的产品等级结构麻烦,需要对原有系统进行较大的修改,甚至需要修改抽象层代码,这显然会带来较大的丌便,违背了开闭原则

适用环境:

一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节

系统中有多于一个的产品族,但每次只使用其中某一产品族

属于同一个产品族的产品将在一起使用,这一约束必须在系统的设计中体现出来

产品等级结构稳定,在设计完成之后丌会向系统中增加新的产品等级结构或者删除已有的产品等级结构

UML图:

实例目录:

具体代码:

TV.java

package abstractFactory;

public interface TV {
	public void play();

}

HaierTV.java

package abstractFactory;

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

}

HisenseTV.java

package abstractFactory;

public class HisenseTV implements TV {

	@Override
	public void play() {
		// TODO Auto-generated method stub
		System.out.println("海信电视播放中");

	}

}

AirConditioner.java

package abstractFactory;

public interface AirConditioner {
	public void changeTemperture();

}

HaierAirConditioner.java

package abstractFactory;

public class HaierAirConditioner implements AirConditioner {

	@Override
	public void changeTemperture() {
		// TODO Auto-generated method stub
		System.out.println("海尔空调制冷中...");
	}

}

HisenseAirConditioner.java

package abstractFactory;

public class HisenseAirConditioner implements AirConditioner {

	@Override
	public void changeTemperture() {
		// TODO Auto-generated method stub
		System.out.println("海信空调制冷中...");

	}

}

Factory.java

package abstractFactory;

public interface Factory {
     public TV produceTV();
     public  AirConditioner produceAirConditioner();
}

HaierFactory.java

package abstractFactory;

public class HaierFactory implements Factory {

	@Override
	public TV produceTV() {
		// TODO Auto-generated method stub
		
		return new HaierTV();
 
	}

	@Override
	public AirConditioner produceAirConditioner() {
		// TODO Auto-generated method stub
		
		return new HaierAirConditioner();

	}

}

HisenseFactory.java

package abstractFactory;

public class HisenseFactory implements Factory {

	@Override
	public TV produceTV() {
		// TODO Auto-generated method stub
		return new HisenseTV();

	}

	@Override
	public AirConditioner produceAirConditioner() {
		// TODO Auto-generated method stub
		return new HisenseAirConditioner();

	}

}

XMLUtil.java

package abstractFactory;

import java.io.File;

import javax.xml.parsers.documentBuilder;
import javax.xml.parsers.documentBuilderFactory;

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

public class XMLUtil {
	public static Object getBean() {
		try {
			
			//创建文档对象
			
			documentBuilderFactory dFactory=documentBuilderFactory.newInstance();
			documentBuilder builder =dFactory.newdocumentBuilder();
			document doc;
			doc=builder.parse(new File("abstractFactoryConfig.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;
		}
	}


}

abstractFactoryConfig.java



  abstractFactory.HaierFactory

Client.java

package abstractFactory;

public class Client {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		TV tv;
		AirConditioner ac;
		Factory factory;
		factory=(Factory)XMLUtil.getBean();
		ac=factory.produceAirConditioner();
		tv=factory.produceTV();
		tv.play();
		ac.changeTemperture();

	}

}

运行结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/754573.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号