设计模式之简单工厂模式

simple factory design pattern

简单工厂模式的概念、简单工厂模式的结构、简单工厂模式优缺点、简单工厂模式的使用场景、简单工厂模式的实现示例


注:简单工厂模式没有被收录在 GoF 的二十三种设计模式中。

1、简单工厂的概念

  简单工厂模式,与其说是设计模式,不如称它为编程习惯。简单工厂只提供了简单的对象生产能力,且违反了软件设计原则的 开闭原则。其没有被收录在 GoF 的二十三种设计模式中。

2、简单工厂的结构

  • 抽象产品:定义了产品的行为。
  • 具体产品:实现了抽象产品接口,使产品具像化。
  • 具体工厂:实现了生产产品的功能。

simple-factory-class

3、简单工厂的优缺点

3.1、优点

  • 封装了对象创建的具体过程,使对象的创建的使用分离,降低耦合度。

3.2、缺点

  • 违反了开闭原则。若增加了新产品,则需要修改工厂类代码。

4、简单工厂的使用场景

  • 需要将对象创建过程与对象使用过程解耦时。
  • 产品固定或变化率低时。

5、简单工厂的实现示例

  抽象产品:

public interface Product {

    /**
     * 定义产品行为
     */
    void behavior();
}

  具体产品一:

public class OneProduct implements Product {

    @Override
    public void behavior() {
        System.out.println("我是产品一");
    }
}

  具体产品二:

public class TwoProduct implements Product {

    @Override
    public void behavior() {
        System.out.println("我是产品二");
    }
}

  工厂类:

public class ProductFactory {

    /**
     * 生产产品
     * @param type
     * @return
     */
    public Product product(String type) {
        Product product;
        if ("one".equals(type)) {
            product = new OneProduct();
        } else if ("two".equals(type)) {
            product = new TwoProduct();
        } else {
            throw new RuntimeException("暂不能生产该类型产品");
        }
        return product;
    }
}

  测试类:

public class SimpleFactoryTest {

    public static void main(String[] args) {
        ProductFactory factory = new ProductFactory();

        Product product = factory.product("one");
        Product product1 = factory.product("two");

        product.behavior();
        product1.behavior();

        Product product2 = factory.product("three");
    }
}

  测试结果:

我是产品一
我是产品二
Exception in thread "main" java.lang.RuntimeException: 暂不能生产该类型产品
	at org.xgllhz.designpattern.createtype.simplefactory.ProductFactory.product(ProductFactory.java:23)
	at org.xgllhz.designpattern.createtype.simplefactory.SimpleFactoryTest.main(SimpleFactoryTest.java:19)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值