OOP设计模式在路上(一)——简单工厂模式
前言
目前以LabVIEW为主要开发工具,熟悉常规开发框架(队列+状态机),个人用得比较多也感觉比较好用和强大的(JKI,AMC),也用它们开发过一些测试平台,但感觉到了一个瓶颈期,想寻求突破,提升LabVIEW的编程水平和思想,所以自己开始学习LVOOP,写此博文,一为自己知识的总结和思考消化,二是希望能为有同样困惑的小伙伴带来一点启发。
OOP设计模式学习书籍选用了程杰的《大话设计模式》,个人感觉还不错,挺适合我这种新手入门的,所以书中的内容在自己理解后会用Labview实现并分享出来,如有错误之处,还请大神指点一二。
简单工厂模式
所谓工厂模式,我的理解是,只需向工厂提供一个你想要的“产品标识”,工厂就可以生产出你想要的产品。也就是说,我们将容易变化的地方放到客户端,在客户端选择实例化谁,这个过程我认为就是工厂生产的过程。用计算器的例子来说,我们可以将不同的运算方法(+, -, *, /等)看成是产品,当我们在界面中触发这几个事件时,相当于是向工厂中传入了产品标识,从而可以得到我们想要的产品。
例如,当前需求实现加、减、乘、除四个运算的功能,来看LabVIEW的实现过程:

此项目仔细思考后,可以发现需求可变的地方很可能是需要我不断的去增加新的运算方法(比如今天添加一个平方运算,明天再添加一个开方运算,等等),那就可以考虑对变化的地方进行抽象,我们创建一个抽象的运算类,然后按照需求去新增具体的运算类去继承抽象的父类,如下图所示:


运算的过程都是一样的,提供两个参数,然后计算得到结果,只是算法不一样而已。那便可以在抽象类中定义两个私有数据(num1,num2),创建访问器对其进行读写操作,如下图所示。

接着再创建一个动态抽象方法(Get Result),获取计算的结果,抽象方法在具体的子类中实现。
然后根据需求创建四个具体的运算类,并重新Get Result方法,对应(+,-,*,/)的具体实现,如下图所示。

最后在创建一个工厂类,通过工厂便可按客户端需求实例指定对象,完成相应的运算操作。

当需求发送变化(如新增一个开方运算),只需新增一个开方运算类,在工厂类的product方法中添加新的“产品生产过程”,然后再添加新的事件触发即可,如下图所示:

从这个简单的例子便可感受到OOP的“魔力”,方便扩展,维护等。源码参考:链接:https://pan.baidu.com/s/13bY5QVC5ajJtllpmj7cNLA 密码:1l0o
OOP设计模式在路上(一)——简单工厂模式的更多相关文章
- Java设计模式(一) 简单工厂模式不简单
摘要:本文介绍了简单工厂模式的概念,优缺点,实现方式,以及结合Annotation和反射的改良方案(让简单工厂模式不简单).同时介绍了简单工厂模式(未)遵循的OOP原则.最后给出了简单工厂模式在JDB ...
- C#设计模式学习笔记:简单工厂模式(工厂方法模式前奏篇)
本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7551373.html,记录一下学习过程以备后续查用. 一.引言 简单工厂模式并不属于GoF23里面的设计模式 ...
- 设计模式(二)简单工厂模式(Simple Factory Pattern)
一.引言 这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理解的模式——简单工厂模式. 二.简单工厂 ...
- <一>读<<大话设计模式>>之简单工厂模式
工厂模式尽管简单.可是写下这篇文章却不简单. 第一:本人经过内心的挣扎后才决定開始写博文的.为什么呢,由于好长时间没有写了,对自己的文学功底也是好不自信.可是技术这东西你不写出来你真不知道自己掌握多少 ...
- Unity C# 设计模式(二)简单工厂模式
定义: 简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一. 简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例 ...
- Java设计模式学习笔记(二) 简单工厂模式
前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 正文开始... 1. 简介 简单工厂模式不属于GoF23中设计模式之一,但在软件开发中应用也较为 ...
- Java设计模式(三)简单工厂模式
定义与类型 定义:由一个工厂对象决定创建出哪一种产品类的实例 类型:创建型,但不属于GOF23种设计模式 适用场景 工厂类负责创建的对象比较少 客户端(应用层)只知道传入工厂类的参数,对于如何创建对象 ...
- C# 设计模式(1)——简单工厂模式、工厂模式、抽象工厂模式
1.前言 上一篇写了设计模式原则有助于我们开发程序的时候能写出高质量的代码(牵一发而不动全身),这个系列还是做个笔记温习一下各种设计模式,下面就看看简单工厂模式.工厂模式.抽象工厂模式. 2.简单工厂 ...
- PHP设计模式(一)简单工厂模式 (Simple Factory For PHP)
最近天气变化无常,身为程序猿的寡人!~终究难耐天气的挑战,病倒了,果然,程序猿还需多保养自己的身体,有句话这么说:一生只有两件事能报复你:不够努力的辜负和过度消耗身体的后患.话不多说,开始吧. 一.什 ...
- 《JS设计模式笔记》 2,简单工厂模式
<script type="text/javascript"> //简单工厂模式 //定义:由一个方法来决定到底要创建哪个类的实例,而这些实例经常拥有相同的接口.其实例 ...
随机推荐
- JavaScript(变量、作用域和内存问题)
JavaScript是一个变量松散型的语言.(不像Java一样强类型语言.) JavaScript变量包括两种:基本类型(简单的数据段)和引用类型(对象). 一.基本数据类型(5种) Undefine ...
- Android开发 - 掌握ConstraintLayout(十一)复杂动画!如此简单!
介绍 本系列我们已经介绍了ConstraintLayout的基本用法.学习到这里,相信你已经熟悉ConstraintLayout的基本使用了,如果你对它的用法还不了解,建议您先阅读我之前的文章. 使用 ...
- 3D轮播图
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Metasploit Framework(6)客户端渗透(上)
文章的格式也许不是很好看,也没有什么合理的顺序 完全是想到什么写一些什么,但各个方面都涵盖到了 能耐下心看的朋友欢迎一起学习,大牛和杠精们请绕道 前五篇文章讲解了Metasploit Framewor ...
- 关于PHP中拿到MySQL中数据中的中文在网页上显示为?的解决办法!
问题: 解决方案: 在PHP 代码中 输入 : //$connection 是链接数据库返回的变量名: mysqli_set_charset($connection,'utf8'); 完美解决:
- [源码]Python简易http服务器(内网渗透大文件传输含下载命令)
Python简易http服务器源码 import SimpleHTTPServerimport SocketServerimport sysPORT = 80if len(sys.argv) != 2 ...
- 分布式事务之深入理解什么是2PC、3PC及TCC协议?
导读 在上一篇文章<[分布式事务]基于RocketMQ搭建生产级消息集群?>中给大家介绍了基于RocketMQ如何搭建生产级消息集群.因为本系列文章最终的目的是介绍基于RocketMQ的事 ...
- Mac idea激活
感谢https://blog.csdn.net/HALEN001/article/details/81137092 1.下载IntelliJ IDEA 2018.2.2版本和破解补丁Jetbrains ...
- csv与xlsx导出
一.csv与xlsx格式基本介绍 csv即comma seperate values - 逗号分隔值,文件以纯文本形式来存储表格数据,它可以由任意数目的记录组成,记录之间通过某种换行符来分 ...
- 解决transition动画与display冲突的几种方法
如demo(如果没有显示,请查看源地址http://jsfiddle.net/ihardcoder/HNduT/2/)所示,基本的效果是在点击“Translate”按钮后,蓝色区域透明度变为0,然后隐 ...