java中工厂方法模式、抽象工厂模式都是用于优化对象生成的设计模式。其中,工厂、抽象工厂模式是用来进行对象的出事化工作,并提供对象获取的接口。
1 工厂设计模式
工厂设计模式的核心就行封装对象的初始化过程,用户只需要提供类的名称就可以获取一个对象的实例。要实现这种模式,需要先明确亮点:生产什么,由谁生产。所以需要有两个基本的类:Product、Factory。
下面以女娲造人为例,使用工厂设计模式。
抽象产品类(人):
public interface Human {
public String getColor();
public void say();
}
具体产品类(黄种人、白种人)
public class YellowHuman implements Human {
@Override
public String getColor() {
return "黄色";
}
@Override
public void say() {
System.out.println("我是黄种人");
}
}
白种人类似
抽象工厂类
public abstract class AbstractHumanFactory {
public abstract <T extends Human> T createHuman(Class<T> c);
}
具体实现
public class HumanFactory extends AbstractHumanFactory {
@SuppressWarnings("unchecked")
@Override
public <T extends Human> T createHuman(Class<T> c) {
Human human = null;
try {
human = (T)Class.forName(c.getName()).newInstance();
} catch (InstantiationException | IllegalAccessException
| ClassNotFoundException e) {
e.printStackTrace();
System.out.println("人种生成错误");
}
return (T) human;
}
}
应用代码
public static void factoryDemo(){
HumanFactory humanFactory = new HumanFactory();
WhiteHuman whiteHuman = humanFactory.createHuman(WhiteHuman.class);
whiteHuman.say();
}
这样设计后,我们想要获取WhiteHuman对象,就不需要关心该对象实际的初始化过程和条件,只需要传入类名就可以获取一个实例。就好像建造了一个工厂,为我们不断的生产一个类的对象。