工厂模式尽管简单。可是写下这篇文章却不简单。

第一:本人经过内心的挣扎后才决定開始写博文的。为什么呢,由于好长时间没有写了,对自己的文学功底也是好不自信。可是技术这东西你不写出来你真不知道自己掌握多少。或者是否掌握其本质;第二:老婆怀孕了,没时间写了。可是我还是挤出时间開始写。于是这篇文章在这种环境下成了。以后还有兴许的文章。谢谢关注!

为什么从设计模式開始学习呢?事实上曾经对设计模式有些了解,可是用不到也就没有深入,如今差点儿相同也忘完了,本人工作三年了。对一些大众上的技术(比方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

<一>读<<大话设计模式>>之简单工厂模式的更多相关文章

  1. <十一>读<<大话设计模式>>之抽象工厂模式

    学习设计模式有一段时间了,对设计模式有一个体会,就是没那么难.就是设计程序遵循一些原则,让代码可复用,在改动的时候不用涉及太多的类,扩展方便.抽象工厂模式名字听起来抽象.但理解起来一点也不抽象,用语言 ...

  2. 大话设计模式之PHP篇 - 简单工厂模式

    假设有一道编程题:输入两个数字和运算符,然后得到运算结果.非常简单的一道题目,通常的实现代码如下: <?php Function Operation($val1, $val2, $operate ...

  3. Java设计模式(一) 简单工厂模式不简单

    摘要:本文介绍了简单工厂模式的概念,优缺点,实现方式,以及结合Annotation和反射的改良方案(让简单工厂模式不简单).同时介绍了简单工厂模式(未)遵循的OOP原则.最后给出了简单工厂模式在JDB ...

  4. 设计模式(二)简单工厂模式(Simple Factory Pattern)

    一.引言 这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理解的模式——简单工厂模式. 二.简单工厂 ...

  5. Unity C# 设计模式(二)简单工厂模式

    定义: 简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一. 简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例 ...

  6. Java设计模式学习笔记(二) 简单工厂模式

    前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 正文开始... 1. 简介 简单工厂模式不属于GoF23中设计模式之一,但在软件开发中应用也较为 ...

  7. C#设计模式学习笔记:简单工厂模式(工厂方法模式前奏篇)

    本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7551373.html,记录一下学习过程以备后续查用. 一.引言 简单工厂模式并不属于GoF23里面的设计模式 ...

  8. Java设计模式(三)简单工厂模式

    定义与类型 定义:由一个工厂对象决定创建出哪一种产品类的实例 类型:创建型,但不属于GOF23种设计模式 适用场景 工厂类负责创建的对象比较少 客户端(应用层)只知道传入工厂类的参数,对于如何创建对象 ...

  9. C# 设计模式(1)——简单工厂模式、工厂模式、抽象工厂模式

    1.前言 上一篇写了设计模式原则有助于我们开发程序的时候能写出高质量的代码(牵一发而不动全身),这个系列还是做个笔记温习一下各种设计模式,下面就看看简单工厂模式.工厂模式.抽象工厂模式. 2.简单工厂 ...

随机推荐

  1. PHP07 函数

    学习要点 函数的定义 自定义函数 函数的工作原理和结构化编程 PHP变量范围 声明及应用各种形式的PHP函数 递归函数 使用自定义函数库 匿名函数和闭包 常用PHP系统函数 PHP7函数新特性 函数的 ...

  2. 性能测试,如何得到大量token,并保存在本地文件中

    需求:性能测试需要大量的token,模拟登陆 设计思路: 1.使用语言:python +request+正则匹配+写入本地 2.jmeter+函数助手+正则或者json/yaml+后置处理器beans ...

  3. Vue之computed与watch的使用

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 普通平衡树(treap)

    题干:6种操作: 1. 插入x数 2. 删除x数(若有多个相同的数,因只删除一个) 3. 查询x数的排名(若有多个相同的数,因输出最小的排名) 4. 查询排名为x的数 5. 求x的前驱(前驱定义为小于 ...

  5. Release Python Program as exe

    py2exe 可以用来将python program 以exe的形式发布. 安装py2exe 对于python 3.x pip install py2exe 可以直接安装 对于python 2.7, ...

  6. 树莓派 - RasberryPi推送数据到cloudMQTT

    创建用户 在https://www.cloudmqtt.com/上创建一个帐户 转到右上角的控制面板 点击"创建"按钮 安装lib sudo pip install paho-mq ...

  7. tornado框架基础04-模板基础

    01 模板 模板演示 配置路径 在 application 中配置模板文件和静态文件的路径: template_path='templates', static_path='static', 模板 & ...

  8. 激活windows10(已更新工具)

    激活windows10 1.用cmd命令: 自己动手,KMS激活win10 2016 长期服务版.步骤如下:命令提示符(管理员),依次输入以下3条命令 slmgr /ipk DCPHK-NFMTC-H ...

  9. int内部方法释义

    python基本数据类型包括:int.str.list.tuple.dict.bool.set(),一切事物都是对象,对象由类创建 1. bit_length:返回数字占用的二进制最小位数 def b ...

  10. Java基础学习之数组基本属性和方法

    数组对于每一门编程语言都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同.Java语言中提供的数组是用来存储固定大小的同类型元素.你可以声明一个数组变量,如 int[100] 来代替直接 ...