天天看点

设计模式记录-工厂方法模式

定义:定义一个用于创建对象的接口,让子类决定实例化哪个类,工厂方法使一个类的实例化延迟到子类。

其通用格式为:

产品的接口

public interface Product {
    
    void method();
}
           

具体产品

public class ConcreteProduct2 implements Product {
    public void method() {
        //具体处理
        System.out.println("this is ConcreteProduct2");
    }
}


public class ConcreteProduct1 implements Product {
    public void method() {
        //具体处理
        System.out.println("this is ConcreteProduct1");
    }
}
           

抽象工厂类

public abstract class Creator {
    //创建Product
    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[] args) {
        Creator creator = new ConcreteCreator();
        ConcreteProduct1 product = creator.createProduct(ConcreteProduct1.class);
        // 具体业务处理
        product.method();
    }
}
           

优点

  1. 良好的封装性,代码结构清晰。创建产品只需要知道产品的类名即可,不用知道创建过程,降低模块间的耦合度。
  2. 易于扩展。增加产品时只需要创建产品实现接口即可。
  3. 屏蔽产品。产品类实现如何变化调用者不需要关心,只需要关心产品的接口,只要产品接口不变化,系统中的上层模块就不需要变化。

继续阅读