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对象,就不需要关心该对象实际的初始化过程和条件,只需要传入类名就可以获取一个实例。就好像建造了一个工厂,为我们不断的生产一个类的对象。