• 工厂模式


    工厂模式(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

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

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

  • 相关阅读:
    Asp.Net下的DataGrid的多层表头(转自csdn)
    C#中使用DirectX编程 (转)
    Factory Method来实现数据库操作的类 (转) 原文:冷风.NET
    (转)关于定时器,介绍得很好!
    (原创)如何让web页面产生服务器数据返回后仍然能够保留到用户输入的位置!
    最近加入了控件开发团队,发现一些基础的东西,转发上来方便大家学习(转)
    中国共享软件走向国际指南(转,有感而发!)
    水晶报表官方实例大全 (转)
    用VS.NET2003制作WEB应用程序的安装包 (转)
    开发 Windows Mobile 应用程序: FAQ(最近买了ppc,正好打算学习开发使用。)
  • 原文地址:https://www.cnblogs.com/tilamisu007/p/9525937.html
Copyright © 2020-2023  润新知