1.工厂方法模式简介
定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类。
2.工厂方法模式简单实现
我接着举电脑生产的例子。
①创建抽象产品
电脑产品类,它有一个start方法用于启动电脑:
public abstract class Computer{
public abstract void start();
}
②创建具体产品
具体的电脑产品分别是联想、惠普和华硕电脑:
public class LenovoComputer extends Computer {
@Override
public void start() {
System.out.println("联想电脑启动");
}
}
public class HpComputer extends Computer {
@Override
public void start() {
System.out.println("惠普电脑启动");
}
}
public class AsusComputer extends Computer{
@Override
public void start() {
System.out.println("华硕电脑启动");
}
}
View Code
③创建抽象工厂
里面有一个createComputer方法,想生产哪个品牌的电脑就生产那个:
public abstract class ComputerFactory {
public abstract <T extends Computer> T createComputer(Class<T> clz);
}
④具体工厂
广达代工厂是一个具体的工厂,他继承抽象工厂,通过反射来生产不同厂家的电脑:
/**
* 广达代工厂
*/
public class GDComputerFactor extends ComputerFactory {
@Override
public <T extends Computer> T createComputer(Class<T> clz) {
Computer computer=null;
String classname=clz.getName();
try {
//通过反射来生产不同厂家的电脑
computer= (Computer) Class.forName(classname).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return (T) computer;
}
}
⑤客户端调用
public class Client {
public static void main(String[]args) {
ComputerFactory computerFactory = new GDComputerFactor();
LenovoComputer mLenovoComputer=computerFactory.createComputer(LenovoComputer.class);
mLenovoComputer.start();
HpComputer mHpComputer=computerFactory.createComputer(HpComputer.class);
mHpComputer.start();
AsusComputer mAsusComputerr=computerFactory.createComputer(AsusComputer.class);
mAsusComputerr.start();
}
}
结构很简单,看看下面的UML图就更加容易理解了: