zoukankan      html  css  js  c++  java
  • 工厂模式

    工厂模式(Factory Pattern)属于创建型模式,它提供了一种创建对象的最佳方式。

    在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

    使用场景:业务方面:在处理奖惩、订单、押金、保险的流水时,不同的类型单独处理;

                      通用业务:日志记录,日志记录到本地还是远程服务器;数据库访问;

    一、简单工厂

    实现:根据创建接口传入的类型来选择返回的创建对象

    成员:产品接口类(或抽象类)、产品实现类、工厂类

    缺点:新增一种实现类需要再工厂类中添加判断,违背开闭原则

    /**
     * 简单工厂模式
     * 根据参数code来选择对应的产品
     * 新增一种产品需要添加判断,更改工厂内的方法
     * 违背开闭原则
     * Created by wanghh on 2018-8-23.
     */
    public class SimpleFactory {
        public static AbstractProdtctService createProductService(Integer code) {
            if (code == null) {
                return null;
            }
            switch (code) {
                case 1:
                    return SpringContextFactory.getBean(AProdtctServiceImpl.class);
                case 2:
                    return SpringContextFactory.getBean(BProdtctServiceImpl.class);
                case 3:
                    return SpringContextFactory.getBean(CProdtctServiceImpl.class);
                default:
                    return SpringContextFactory.getBean(AProdtctServiceImpl.class);
            }
        }
    }

    二、工厂方法

    实现:将简单工厂类SimpleFactory拆分为抽象工厂类和具体工厂类,创建对象在具体工厂类中,其决定具体实例化的对象

    成员:抽象产品接口类(或抽象类)、具体产品类、抽象工厂、具体工厂

    优点:克服简单工厂违背的开闭原则,当新增一个产品时,只要新增一个具体工厂类即可

    缺点:系统中类的个数将成对增加,在一定程度上增加了系统的复杂度

    /**
     * 工厂方法
     * 创建对象的操作延迟到具体工厂里实现
     * 新增一种产品,只需新增一种具体工厂
     */
    public interface AbstractFactory {
        ProdtctService createProductService();
    }
    
    /**
     * A具体工厂
     */
    public class AFactory implements AbstractFactory{
        @Override
        public ProdtctService createProductService() {
            return new AProdtctServiceImpl();
        }
    }
    
    /**
     * B具体工厂
     */
    public class BFactory implements AbstractFactory{
        @Override
        public ProdtctService createProductService() {
            return new BProdtctServiceImpl();
        }
    }
    
    /**
     * C具体工厂
     */
    public class CFactory implements AbstractFactory{
        @Override
        public ProdtctService createProductService() {
            return new CProdtctServiceImpl();
        }
    }

    三、抽象工厂

    抽象工厂是围绕一个超级工厂创建其他工厂,该超级工厂又称为其他工厂的工厂。提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。

    成员:抽象工厂、具体工厂1、具体工厂2、抽象产品A、抽象产品B、具体产品A1、具体产品A2、具体产品B1、具体产品B2

    场景:系统的产品多于一个产品族,而系统只消费某一族的产品。

    缺点:类个数较多,程序复杂性增加,新增一种产品,需要更改多个类

  • 相关阅读:
    ExtJs控件属性配置详细
    static void和void区别(转)
    OpenSSL 内存管理分析笔记
    Openssl 之大数运算函数 BN
    python学习:字符串
    python学习:字典
    python学习:购物车程序
    python学习:元组和嵌套
    python学习:列表
    python学习:continue及break使用
  • 原文地址:https://www.cnblogs.com/tilamisu007/p/9525937.html
Copyright © 2011-2022 走看看