【设计模式】简单工厂模式

简介

简单工厂模式,又叫做静态工厂方法模式。由一个静态的工厂决定创建出哪一种产品类的实例。

例子

假设有两个产品, productA 和 productB。我们在 Test 类中并不直接实例化这两个对象,而是先创建一个静态工厂,再用这个工厂创建相应的 product。

总的类关系如下图所示:
类之间的关系
可以看出,Test 类只与 Factory 和 产品的接口 IProduct 关联。

具体的代码如下:

IProduct 接口

public interface IProduct {
    public void method();
}

实现类 ProductA

public class ProductA implements IProduct {
    @Override
    public void method() {
        System.out.println("Method for Product [A]");
    }
}

实现类 ProductB

public class ProductB implements IProduct {
    @Override
    public void method() {
        System.out.println("Method for Product [B]");
    }
}

静态工厂类 Factory
注意工厂的构造函数是 private 的,意味着不能直接实例化出一个工厂对象,只能调用类中的静态方法。

public class Factory {
    private Factory() {
    }

    public static IProduct createProduct(String name) {
        if (name == null) {
            return null;
        }
        if (name.equals("A")) {
            return new ProductA();
        } else if (name.equals("B")) {
            return new ProductB();
        } else {
            throw new IllegalArgumentException("Cannot find product: " + name);
        }
    }
}

Test 类

public class Test {
    public static void main(String[] args) {
        IProduct product1 = Factory.createProduct("A");
        product1.method();

        IProduct product2 = Factory.createProduct("B");
        product2.method();

        IProduct product3 = Factory.createProduct("C");
        product3.method();
    }
}

运行结果如下
运行结果

总结

简单工厂模式实现了创建类和使用类的业务分离,但是,其一个很大的缺点在于,若出现了新的 ProductC, 需要修改 Factory 类中的相应代码。即,简单工厂不满足开闭原则——对扩展开放,对修改封闭。而工厂方法模式为了弥补这个弊端。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值