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

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

为什么从设计模式開始学习呢?事实上曾经对设计模式有些了解,可是用不到也就没有深入,如今差点儿相同也忘完了,本人工作三年了。对一些大众上的技术(比方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. Linux内核——进程管理之SMP负载均衡(基于版本4.x)

    <奔跑吧linux内核>3.3笔记,不足之处还望大家批评指正 根据实际物理属性,CPU域分类如图1所示. 图1 CPU域分类 问题一:一个4核处理器中的每个物理CPU拥有独立L1 cach ...

  2. go语言碎片整理之标准库log

    log Go语言内置的log包实现了简单的日志服务.本文介绍了标准库log的基本使用. 使用Logger log包定义了Logger类型,该类型提供了一些格式化输出的方法.本包也提供了一个预定义的“标 ...

  3. AGC 033

    目录 A. Darker and Darker B. LRUD Game 题面 题解 代码 C. Removing Coins 题面 题解 代码 D. Complexity 题面 题解 代码 E. G ...

  4. struts2拦截器加自定义注解实现权限控制

    https://blog.csdn.net/paul342/article/details/51436565 今天结合Java的Annotation和Struts2进行注解拦截器权限控制. 功能需求: ...

  5. UVA624 CD,01背包+打印路径,好题!

    624 - CD 题意:一段n分钟的路程,磁带里有m首歌,每首歌有一个时间,求最多能听多少分钟的歌,并求出是拿几首歌. 思路:如果是求时常,直接用01背包即可,但设计到打印路径这里就用一个二维数组标记 ...

  6. NYOJ448寻找最大数,贪心~~

    寻找最大数 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大, 比如当n=92081346718538 ...

  7. poj 3155 二分+最小割求实型最小割(最大密集子图)

    /* 最大密集子图子图裸题 解法:设源点s和汇点t 根据胡波涛的<最小割模型在信息学中的应用> s-每个点,权值为原边权和m, 每个点-t,权值为m+2*g-degree[i], 原来的边 ...

  8. Toad Oracle 本地/远程数据库导入/导出 数据库备份

    1. Toad进入数据库后,选择 Database ==> Export  ===>  Export Utility Wizard ,选择export  user(按用户导出),选择Toa ...

  9. 使用Sencha Architect开发Sencha Touch应用的整理

    官网:http://www.sencha.com/ 其实官网上的文档都很清楚了,不过整理一下总比较好 第一步,软件准备 注: 以下软件的安装本着这样两条原则 一是不要安装在中文目录下 二是不要安装在带 ...

  10. SkyWalking 分布式追踪系统

    随着微服务架构的流行,一些微服务架构下的问题也会越来越突出,比如一个请求会涉及多个服务,而服务本身可能也会依赖其他服务,整个请求路径就构成了一个网状的调用链,而在整个调用链中一旦某个节点发生异常,整个 ...