工厂模式

Desc

定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使的一个类的实例化延迟到了子类

场景

  • 当你不知道改使用对象的确切类型的时候
  • 当你希望为库或框架提供扩展其内部组件的方式时

优点

  • 将具体产品和创建者解耦
  • 符合单一职责原则
  • 符合开闭原则

实现

简单工程

public class Test {
    public static void main(String[] args) {
        // 简单工程
        Product p1 = Application.getObject("1");
        p1.method();
        Product p2 = Application.getObject("2");
        p2.method();   
    }
}

class Application {
    private static Product createProduct(String type) {
        Product product;
        switch (type) {
            case "1":
                product = new ProductA();
                break;
            case "2":
                product = new ProductB();
                break;
            default:
                product = null;
        }
        return product;
    }

    public static Product getObject(String type) {
        return createProduct(type);
    }
}

工厂方法

  1. 不同实体类
public interface Product {
    public void method();
}

public class ProductA implements Product{
    @Override
    public void method() {
        System.out.println("ProductA.method executed.");
    }
}
public class ProductB implements Product{
    @Override
    public void method() {
        System.out.println("ProductB.method executed.");
    }
}

  1. 抽象类及具体实现类
public abstract class ProductFactory {
    abstract Product createProduct();
    Product getObject(){
        return createProduct();
    }
}

public class ProductAService extends ProductFactory {
    @Override
    Product createProduct() {
        return new ProductA();
    }
}
public class ProductBService extends ProductFactory {
    @Override
    Product createProduct() {
        return new ProductB();
    }
}
  1. 测试类
 public static void main(String[] args) { 
        ProductFactory productA = new ProductAService();
        Product object = productA.getObject();
        object.method();

        ProductFactory productB = new ProductBService();
        Product object1 = productB.getObject();
        object1.method();  
    }
posted @ 2024-06-06 13:48  zrx001  阅读(9)  评论(0)    收藏  举报