1、简单工厂模式(非GOF)

简单工厂中创建实例的方法通常是静态方法,所以简单工厂模式(simple factory pattern)也被叫做静态工厂方法模式(static factory method pattern)。

1、简单工厂模式的结构

  • 简单工厂(SimpleFactory):是简单工厂的核心,负责创建所有的产品,具有一定的逻辑;
  • 抽象产品(Product):是简单工厂负责创建的所有对象的父类或者接口类,负责描述所有产品实例的公共接口;
  • 具体产品(ConcreteProduct):是简单工厂负责创建的所有的对象类。

2、简单工厂的优缺点

  • 优点:

    工厂和产品职责明确,工厂负责产品创建,产品负责业务逻辑;

    客户端无需知道具体产品类型,只需要知道对象参数即可;

  • 缺点

    工厂类单一,负责所有产品的创建,职责过重,未被高聚合原则

    维护困难,只要增加新的产品就需要维护工厂类

    简单工厂类使用了static方法,使得工厂角色无法被继承

3、代码示例

import org.junit.Test;

/**
 * 简单工厂模式:通过不同的参数控制工厂生产不同的产品
 * 优点:
 *      1、工厂和产品职责明确,工厂负责产品创建,产品负责业务逻辑
 *      2、客户端无需知道具体产品类型,只需要知道对象参数即可
 * 缺点:
 *      1、工厂类单一,负责所有产品的创建,职责过重,未被高聚合原则
 *      2、维护困难,只要增加新的产品就需要维护工厂类
 *      3、简单工厂类使用了static方法,使得工厂角色无法被继承
 */
public class SimpleFactoryPattern {

    /**
     * 工厂类
     */
    static class SimpleFactory {
        public static Product createProduct(int cond) {
            Product product;
            switch (cond) {
                case 1:
                    product =  new ConcreteProduct1();
                    break;
                case 2:
                    product =  new ConcreteProduct2();
                    break;
                default:
                    product = null;
            }
            return product;
        }
    }

    /**
     * 抽象产品类
     */
    interface Product {
       void method();
    }

    /**
     * 具体产品类1
     */
    static class ConcreteProduct1 implements Product {

        @Override
        public void method() {
            // do something
        }
    }

    /**
     * 具体产品类2
     */
    static class ConcreteProduct2 implements Product {
        @Override
        public void method() {
            // do something
        }
    }

    @Test
    public void SimpleFactoryTest() {
        Product product = SimpleFactory.createProduct(1); // 调用静态工厂方法,创建产品对象
        product.method();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值