
在工厂方法模式中,抽象产品类Product负责定义产品的共性,实现对事务最抽象的定义。
Creator为抽象创建类,抽象工厂,具体如何创建产品类由具体的实现工厂ConcreteCreator完成。
通用的模板:
public abstract class Product{public void method1(){//业务逻辑}public abstract void method2();//抽象方法}public class ConcreteProduct1 extends Product{public void method2(){//业务逻辑处理}}public class ConcreteProduct2 extends Product{public void method2(){//业务逻辑处理}}public class Creator{public abstract <T extends Product> T createProduct(Class<T> c);}public class ConcreteCreator extends Creator{public <T extends Product> T createProduct(Class<T> c){Product p=null;try{p=(Product)Class.forName(c.getName()).newInstance();}catch(Exception e){//异常处理}return (T)p;}}
public class Client{public static void Main(String[] args){Creator creator=new ConcreteCreator();Product product=creator.createProduct(ConcreteProduct1.class);//继续业务处理}}
工厂方法模式的优点
- 良好的封装性,代码结构清晰。
- 扩展性很优秀,能够很好地拥抱变化,比如增加一个新的ConcreteProduct3,只需要增加一个子类,不需要修改Product和工厂的代码。
- 屏蔽产品类,产品类如何变化,调用者都不需要去关心
工厂模式是典型的解耦框架。高层模块值需要知道产品的抽象类,其他的实现类都不用关心,符合迪米特法则,我不需要的就不要去交流;也符合依赖倒置法则,只依赖产品类的抽象;也符合里氏替换原则,使用产品子类替换父类。
