工厂模式:
define an interface for creating an object, but let sub classes decide which class to instantiate.factory method lets a class defer instantiation to subclasses.(定义一个用于创建对象的接口,让子类决定实例化哪一个类、工厂方法使一个雷的实例化延迟到了子类)
模版:
//抽象产品类 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 abstract 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 product = null; try { product =(Product) Class.forname(c.getName()).newInstance(); }catch(Exception e){ //异常处理 } return (T) product; } } //场景 public class Client { public static void main(String[] arg){ Creator creator = new ConcreteCreator(); Product product = creator.createProduct(ConcreteProduct1.class); //继续处理 } }
优点:1.良好的封装性,代码结构清晰;2.屏蔽产品类。3.解耦,高层模块孩子需要知道产品的抽象类,其他实现可以不用关心。