<一>读<<大话设计模式>>之简单工厂模式
工厂模式尽管简单。可是写下这篇文章却不简单。
第一:本人经过内心的挣扎后才决定開始写博文的。为什么呢,由于好长时间没有写了,对自己的文学功底也是好不自信。可是技术这东西你不写出来你真不知道自己掌握多少。或者是否掌握其本质;第二:老婆怀孕了,没时间写了。可是我还是挤出时间開始写。于是这篇文章在这种环境下成了。以后还有兴许的文章。谢谢关注!
为什么从设计模式開始学习呢?事实上曾经对设计模式有些了解,可是用不到也就没有深入,如今差点儿相同也忘完了,本人工作三年了。对一些大众上的技术(比方struts2、spring、hibernate)已经差点儿相同学习差点儿相同了。技术人员嘛,不能一直停留在表层。不能仅仅会编码。更要学会设计。所以就先拿设计模式开刀。
关于设计模式这一块的书籍和博文不少,本人感觉《《大话设计模式》》这本书讲的很不错,它以诙谐幽默的形式进行解说,而且是循序渐进的,对此感触颇深。该系列博文是对《《大化设计模式》》一书的学习总结。并用java语言(书中样例用c#写的)进行代码演示,保证彻底理解,也留个笔记。
书中介绍简单工厂模式是以一道程序代码開始的,是一个计算器控制台程序,要用面向对象的思想实现。对于大学刚毕业的学生预计会像“小菜”(书中人物)一样,直接进行加减乘除计算,这样做的缺点:1、不适用,而且代码冗余;2、不易维护、不易扩展、不易复用。
一个菜鸟到高手到大神这一过程的蜕变事实上就是对这些代码进行优化,事实上学的技术都是一样的,可是使用程度上、熟练程度上有差距罢了。
真啰嗦。第一次写嘛,给点面子
简单模式:是由一个工厂对象决定创建出哪一种产品类的实例。
样例来了
、定义个抽象类,包含实例对象公共的属性
/*
*不能定义为接口。由于接口不能定义变量。能够定义常量
* 1、事实上这样设计有问题。假如有多个參数怎么办?不能都定义在抽象类里吧
* 2、假设操作符非常多怎么办?总不能一个操作定义一个类吧。
*/
publicabstractclass Operation {
publicdoublenumberA;
publicdoublenumberB;
publicabstractdouble getResult();
}
、加法算法,继承Operation就好了
publicclass OperationAddextendsOperation{
publicdouble getResult(){
returnnumberA +numberB;
}
}
、减法算法。同理
publicclass OperationSubextendsOperation{
publicdouble getResult(){
returnnumberA -numberB;
}
}
、乘除算法就略了,都是一样的。工厂类来了,功能就是要什么算法就生产什么算法
publicclass OperationFactory {
//定义静态方法。目的是对象直接调用
publicstatic Operation createOperation(Stringoperation){
Operation oper =
null;
//jdk1.7以上支持字符串
switch (operation) {
case"+":
oper =
newOperationAdd();
break;
case"-":
oper =
newOperationSub();
break;
//......省略
default:
break;
}
return oper;
}
}
、好了,最后client调用一下试试
publicclass OperationClient {
/**
*
@param args
*/
publicstaticvoid main(String[]
args) {
//
TODO Auto-generated method stub
Operation operation = OperationFactory.createOperation("+");
operation.numberA = 1;
operation.numberB = 2;
System.out.println("參数相加等于:"+operation.getResult());
Operation operation1 = OperationFactory.createOperation("-");
operation1.numberA = 8;
operation1.numberB = 2;
System.out.println("參数相减等于:"+operation1.getResult());
}
}
、附上UML类图,学会画类图非常重要啊
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvanpoZjIwMTI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">
总结:编程是一门技术,更是一门艺术,不能满足于写完代码执行正常就完事,时常考虑怎样让代码更加简洁、更加easy维护、复用和可扩展,仅仅有这样才干不断提高。
写出优雅的代码是一种非常爽的事情。所谓学无止境。事实上这才是理解面向对象的開始呢。
附上源代码地址(csdn好像不能上传附件,仅仅能附上地址了):http://download.csdn.net/detail/jzhf2012/8082159
<一>读<<大话设计模式>>之简单工厂模式的更多相关文章
- <十一>读<<大话设计模式>>之抽象工厂模式
学习设计模式有一段时间了,对设计模式有一个体会,就是没那么难.就是设计程序遵循一些原则,让代码可复用,在改动的时候不用涉及太多的类,扩展方便.抽象工厂模式名字听起来抽象.但理解起来一点也不抽象,用语言 ...
- 大话设计模式之PHP篇 - 简单工厂模式
假设有一道编程题:输入两个数字和运算符,然后得到运算结果.非常简单的一道题目,通常的实现代码如下: <?php Function Operation($val1, $val2, $operate ...
- Java设计模式(一) 简单工厂模式不简单
摘要:本文介绍了简单工厂模式的概念,优缺点,实现方式,以及结合Annotation和反射的改良方案(让简单工厂模式不简单).同时介绍了简单工厂模式(未)遵循的OOP原则.最后给出了简单工厂模式在JDB ...
- 设计模式(二)简单工厂模式(Simple Factory Pattern)
一.引言 这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理解的模式——简单工厂模式. 二.简单工厂 ...
- Unity C# 设计模式(二)简单工厂模式
定义: 简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一. 简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例 ...
- Java设计模式学习笔记(二) 简单工厂模式
前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 正文开始... 1. 简介 简单工厂模式不属于GoF23中设计模式之一,但在软件开发中应用也较为 ...
- C#设计模式学习笔记:简单工厂模式(工厂方法模式前奏篇)
本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7551373.html,记录一下学习过程以备后续查用. 一.引言 简单工厂模式并不属于GoF23里面的设计模式 ...
- Java设计模式(三)简单工厂模式
定义与类型 定义:由一个工厂对象决定创建出哪一种产品类的实例 类型:创建型,但不属于GOF23种设计模式 适用场景 工厂类负责创建的对象比较少 客户端(应用层)只知道传入工厂类的参数,对于如何创建对象 ...
- C# 设计模式(1)——简单工厂模式、工厂模式、抽象工厂模式
1.前言 上一篇写了设计模式原则有助于我们开发程序的时候能写出高质量的代码(牵一发而不动全身),这个系列还是做个笔记温习一下各种设计模式,下面就看看简单工厂模式.工厂模式.抽象工厂模式. 2.简单工厂 ...
随机推荐
- Opencv竟然有中文资料
最近对于OpenCV看的较多,竟然不知不觉找到了一个中文网站,对于母语真的桥开心的嘻嘻 直方图均衡化: http://www.opencv.org.cn/opencvdoc/2.3.2/html/do ...
- Python打包成exe,pyc
D:\mypython\path\ C:\Python27\Scripts\pyinstaller.exe -w mypython.py # Python打包成exe D:\mypython\path ...
- 重载操作符 'operator'
operator 是 C++ 的(运算符的)重载操作符.用作扩展运算符的功能. 它和运算符一起使用,表示一个运算符函数,理解时应将 [operator+运算符] 整体上视为一个函数名. 要注意的是: ...
- 记录xerces使用(VS2017 C++)
1.编译xerces,获得dll文件和lib文件 2.将dll文件和lib文件拷贝到使用xerces的工程目录里面去 3.配置VS2017 C/C++ -> All Options --&g ...
- 2019天梯赛练习题(L1专项练习)
7-1 水仙花数 (20 分) 水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身.例如:1. 本题要求编写程序,计算所有N位水仙花数. 输入样例: 3 输出样例: 153 ...
- OpenJudge-百练-2755-动规
动态规划的话,我们中心思想就是,设一个num数组,num[ i ][ j ] 代表从i的大小中,取出 j 种物品的方法数. 当不取j种物品的时候,我们就让num[ i ][ j ] =num[ i ] ...
- Django中对接第三方支付(支付宝)实现支付的流程
1. 业务逻辑准备 1. 使用沙箱提供的商家环境 沙箱环境:是支付宝提供给开发者的模拟支付的环境 沙箱应用:https://docs.open.alipay.com/200/105311 沙箱账号:h ...
- 剑指Offer(书):数值的整数次方
题目:给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 分析: * 要注意以下几点:* 1.幂为负数时,base不能为0,不然求的时候是对 ...
- ASP.NET MVC WebAPI请求
基础: 首先,先创建一个“ASP.NET 空Web应用程序” : 然后添加对 “System.Web.Http” 和 “System.Web.Http.WebHost” 的引用: 再添加对“Syste ...
- python基础知识--条件判断和循环
一.输入输出 python怎么来接收用户输入呢,使用input函数,python2中使用raw_input,接收的是一个字符串,输出呢,第一个程序已经写的使用print,代码入下: 1 name=in ...