工厂模式 - Factory
简单工厂模式
SimpleFactory Pattern,将一个具体类的实例化交给一个静态工厂方法来执行。
特点:
- 增加功能需要修改工厂类,扩展性较差;
参考:
工厂方法模式
FactoryMethod Pattern,定义一个用于创建对象的接口,让子类决定实例化哪一个类,使一个类的实例化延迟到子类。
特点:
- 增加功能需要修改客户端;
- 多态,业务逻辑与数据访问解耦合;
参考:
抽象工厂模式
AbstractFactory Pattern,定义一个创建一系列相关或相互依赖的对象的接口,而无需指定它们具体的类。
优点:
- 易于交换产品系列;
- 实例创建过程与客户端分离,客户端通过抽象接口操纵实例;
- 抽象工厂可以将一群相关的产品集合起来;
缺点:
- 易于增加工厂类,但增加功能(表类,即产品系列)会导致大批量改动;
改进:
- 利用简单工厂模式改进:易于增加表类,不易增加工厂类
- 反射 + 抽象工厂:易于增加工厂类和表类
using System.Reflection;
Assembly.Load(“程序集名称”).CreateInstance(“命名空间.类名称”);
优点:通过字符串变量,将程序由编译时转为运行时,可以去除switch判断。
- 反射 + 配置文件
using System.Configuration;
优点:具体实现中引入配置文件可以使得用户在不修改任何客户端代码的前提下增加或替换子类。
总结
- 所有应用简单工厂的地方,可考虑利用反射技术去除switch和if,解除分支判断带来的耦合;
参考:
工厂模式 - Factory的更多相关文章
- 设计模式(一)工厂模式Factory(创建型)
设计模式一 工厂模式Factory 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.可是在一些情况下, new操作符直接生成对象会带来一些问题. ...
- 设计模式(一)工厂模式Factory(创建类型)
设计模式一 工厂模式Factory 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.可是在一些情况下, new操作符直接生成对象会带来一些问题. ...
- 工厂模式(Factory)和抽象工厂模式(Abstract Factory)
一.工厂模式(Factory):通过让子类决定该创建的对象是什么,来达到将对象创建的过程封装的目的,工厂方法让类的实例化推迟到子类 (1)涉及角色:抽象产品,具体产品,抽象创建者,具体创建者. ...
- 设计模式(一)工厂模式Factory(创建型)(转)
原文链接:http://blog.csdn.net/hguisu/article/details/7505909 设计模式一 工厂模式Factory 在面向对象编程中, 最通常的方法是一个new操作符 ...
- JAVA:将反射技术应用于工厂模式(Factory)和单例模式(Singleton)的简单代码
反射技术大量用于Java设计模式和框架技术,最常见的设计模式就是工厂模式(Factory)和单例模式(Singleton). 参考URL: http://blog.csdn.net/xiaohai79 ...
- 设计模式 - 工厂模式(factory pattern) 具体解释
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u012515223/article/details/27081511 工厂模式(factory pa ...
- GoF23:工厂模式(Factory)
目录 GoF23:工厂模式(Factory) 工厂模式三种模式 简单工厂模式(静态工厂模式) 工厂方法模式 抽象工厂模式 举例说明 代码实现 GoF23:工厂模式(Factory) 核心本质: 实例化 ...
- 设计模式--工厂模式Factory(创建型)
工厂模式属于创建型模式,分为三类,简单工厂模式.工厂方法模式.抽象工厂模式. 一.简单工厂模式 在工厂中做判断,根据产品类型从而创造相应的产品,当增加新产品时需要修改工厂类. 例如: enum CTY ...
- 工厂模式/factory模式/创建型模式
工厂模式 普通工厂模式 原本需要new出来的对象,通过一个类的方法去搞定,Factory.build(parameter),类似这种. public interface Sender { public ...
随机推荐
- C# 的 Dictionary 寫入前應注意事項
一個已上線.用戶龐大的系統,幾個月來第一次出現這個系統錯誤訊息 : 「已經加入含有相同索引鍵的項目」「已添加了具有相同键的项」An item with the same key has already ...
- 我的SQL总结---未完待续
我的SQL总结---未完待续 版权声明:本文为博主原创文章,未经博主允许不得转载. 总结: 主要的SQL 语句: 数据操作(select, insert, delete, update) 访问控制(g ...
- java,H5微信蓝牙设备开发教程申请设备和添加设备(2)
转载地址 http://www.vxzsk.com/76.html 申请设备功能 a. 登录公众平台,点击左边功能栏的"添加功能插件",选择"设备功能". b ...
- 基于Fragment的百度地图框架的使用
博客:http://blog.csdn.net/developer_jiangqq (一)基本介绍(Fragment和SupportMapFragment): Fragment的使用现在安卓APP开发 ...
- .Net 转战 Android 4.4 日常笔记(6)--Android Studio DDMS用法
Android Studio DDMS与Eclipse DDMS大同小异,下面了解DDMS的使用 DDMS(Dalvik Debug Monitor Service )Dalvik调试监控服务 DDM ...
- Web APi之异常处理(Exception)以及日志记录(NLog)(十六)
前言 上一篇文章我们介绍了关于日志记录用的是Log4net,确实也很挺强大,但是别忘了我们.NET有专属于我们的日志框架,那就是NLog,相对于Log4net而言,NLog可以说也是一个很好的记录日志 ...
- scikit-learn 逻辑回归类库使用小结
之前在逻辑回归原理小结这篇文章中,对逻辑回归的原理做了小结.这里接着对scikit-learn中逻辑回归类库的我的使用经验做一个总结.重点讲述调参中要注意的事项. 1. 概述 在scikit-lear ...
- 在ubuntu server中安装和配置docker
经过一段时间针对不同版本的学习,现在总结当前最新的安装配置过程(应该也是比较简单的) 如果不清楚什么是docker,请参考 https://www.docker.com/ 准备工作 建议在安装之前运行 ...
- Android APK如何签名
Android项目以它的包名作为唯一标识,如果在同一设备上安装两个相同的应用,后面安装的应用就会覆盖前面安装的应用.为了避免这种情况的发生,我们需要对作为产品发布的应用进行签名. 签名其实有两个作用: ...
- 如何使用SOIL在VS2012的 C++环境下显示图片
先看下效果. 这是一个很无聊的功能....首先说下,我做这个功能的初衷并不是为了实现在控制台中显示图片...(这貌似很无聊) 而是因为自己想做用C做一个游戏:http://q.cnblogs.com/ ...