抽象工厂模式-Abstract Factory Pattern
自己的理解:当需要创建不同产品等级,但是是同一个产品族时,使用抽象工厂模式。
抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体 的类。 抽象工厂模式又称为Kit模式,它是一种对象创建型模式。 ● 抽象工厂:它声明了一组用于创建一族产品的方法,每一个方法对应一种产品。 ● 具体工厂:它实现了在抽象工厂中声明的创建产品的方法,生成一组具体产品,这些产品构成了一个产品族,每一个产品都位于某个产品等级结构中。 ● 抽象产品:它为每种产品声明接口,在抽象产品中声明了产品所具有的业务方法。 ● 具体产品:它定义具体工厂生产的具体产品对象,实现抽象产品接口中声明的业务方法。
//抽象产品类 游戏界面控制
public interface InterfaceController {
public void display();
}
//抽象产品类 游戏操作控制
public interface OperationController {
public void display();
}
抽象工厂类:
public interface osFactory {
public OperationController CreateOperController();
public InterfaceController CreateInfaceController();
}
具体产品类:
public class AndroidInterfaceController implements InterfaceController{
@Override
public void display() {
System.out.println("Android游戏界面控制");
}
}
public class AndroidOperationController implements OperationController {
@Override
public void display() {
System.out.println("Android游戏操作控制");
}
}
public class SymbianInterfaceController implements InterfaceController {
@Override
public void display() {
System.out.println("Symbian游戏界面控制");
}
}
public class SymbianOperationController implements OperationController {
@Override
public void display() {
System.out.println("Symbian游戏操作控制");
}
}
具体工厂类:
public class AndroidFactory implements osFactory {
@Override
public OperationController CreateOperController() {
return new AndroidOperationController();
}
@Override
public InterfaceController CreateInfaceController() {
return new AndroidInterfaceController();
}
}
public class SymbianFactory implements osFactory {
@Override
public OperationController CreateOperController() {
return new SymbianOperationController();
}
@Override
public InterfaceController CreateInfaceController() {
return new SymbianInterfaceController();
}
}
XMLUtil类:
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/com/abstracts/factory/Uitl/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" encoding="UTF-8" ?>
<config>
<className>com.abstracts.factory.concreteFactory.AndroidFactory</className>
</config>
Client类
public class Client {
public static void main(String[] args) {
// osFactory osfactory = new AndroidFactory();
osFactory osfactory = (osFactory)XMLUtil.getBean();
InterfaceController ic = osfactory.CreateInfaceController();
OperationController oc = osfactory.CreateOperController();
ic.display();
oc.display();
}
}