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

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

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

    1)购买VPS 2)配置一VPN 建议使用 cisco anycounect  |   ***会连接失败(切记,祭奠浪费的一天)大神可以帮我看下是什么问题 3)进入https://cloud.goog ...

  2. [BZOJ3940]:[Usaco2015 Feb]Censoring(AC自动机)

    题目传送门 题目描述: FJ把杂志上所有的文章摘抄了下来并把它变成了一个长度不超过105的字符串S.他有一个包含n个单词的列表,列表里的n个单词记为t1…tN.他希望从S中删除这些单词.FJ每次在S中 ...

  3. Yii2 advance swiftmailer 不能发送邮件

    我用的是Yii2高级模板,在配置好邮箱后,并编写测试,测试结果表明是发送成功的,但我的邮箱就是接受不了邮件. 经过排查发现,是由 common/config/main-local.php 文件的 'u ...

  4. Ubuntu 开机出现 "Your system is running in low-graphics mode"

    Ubuntu 开机出现 "Your system is running in low-graphics mode" 可能是权限问题 按网上的方法发现sudo命令无法使用,且系统变为 ...

  5. 笔记本无法从DHCP服务器获取地址怎么解决?

    首先,开始/运行,输入 cmd,再输入ipconfig,看看你的IP地址是不是正常的,假如不是,就是获取不到IP地址.如果得到的IP是:169.254.x.x 表示客户机无法得到DHCP的响应.(如果 ...

  6. python 容器 用户注册登录系统

    1. 列表和普通变量有什么区别 列表是数据类型,普通变量是用来存储数据的 可以把列表赋值给普通变量 2.存在列表 a = [11, 22, 33], 如何向列表中添加(增)新元素 44 a.appen ...

  7. python基础知识08-类定义、属性、初始化和析构

    1.类的定义 class 类 是独立存放变量(属性/方法)的一个空间. 每个实例都是一个独立的变量空间.不同实例之间的空间互相不可见. 一个实例的特征,就是属性. 定义在类中的私有属性也可以被子类继承 ...

  8. POJ 1979 Red and Black (DFS)

    Description There is a rectangular room, covered with square tiles. Each tile is colored either red ...

  9. 负载均衡之Ocelot+Consul(配置文件注册服务)

    继上篇 Ocellot 做负载均衡之后,本篇将记录 Ocelot + Consul 试验如何做服务发现和服务注册. 服务发现和服务注册的背景知识,一搜满街都是. 在此,我还是写下自己对这个术语的理解吧 ...

  10. 解决safari里面淘宝京东页面无法打开以及打开后乱码的问题!

    sqlite3 ~/Library/Keychains/*/ocspcache.sqlite3 'DELETE FROM responses WHERE responderURI LIKE " ...