工厂模式尽管简单。可是写下这篇文章却不简单。
第一:本人经过内心的挣扎后才决定開始写博文的。为什么呢,由于好长时间没有写了,对自己的文学功底也是好不自信。可是技术这东西你不写出来你真不知道自己掌握多少。或者是否掌握其本质;第二:老婆怀孕了,没时间写了。可是我还是挤出时间開始写。于是这篇文章在这种环境下成了。以后还有兴许的文章。谢谢关注!
为什么从设计模式開始学习呢?事实上曾经对设计模式有些了解,可是用不到也就没有深入,如今差点儿相同也忘完了,本人工作三年了。对一些大众上的技术(比方struts2、spring、hibernate)已经差点儿相同学习差点儿相同了。技术人员嘛,不能一直停留在表层。不能仅仅会编码。更要学会设计。所以就先拿设计模式开刀。
关于设计模式这一块的书籍和博文不少,本人感觉《《大话设计模式》》这本书讲的很不错,它以诙谐幽默的形式进行解说,而且是循序渐进的,对此感触颇深。该系列博文是对《《大化设计模式》》一书的学习总结。并用java语言(书中样例用c#写的)进行代码演示,保证彻底理解,也留个笔记。
书中介绍简单工厂模式是以一道程序代码開始的,是一个计算器控制台程序,要用面向对象的思想实现。对于大学刚毕业的学生预计会像“小菜”(书中人物)一样,直接进行加减乘除计算,这样做的缺点:1、不适用,而且代码冗余;2、不易维护、不易扩展、不易复用。
一个菜鸟到高手到大神这一过程的蜕变事实上就是对这些代码进行优化,事实上学的技术都是一样的,可是使用程度上、熟练程度上有差距罢了。
真啰嗦。第一次写嘛,给点面子
简单模式:是由一个工厂对象决定创建出哪一种产品类的实例。
样例来了
1、定义个抽象类,包含实例对象公共的属性
/*
*不能定义为接口。由于接口不能定义变量。能够定义常量
* 1、事实上这样设计有问题。假如有多个參数怎么办?不能都定义在抽象类里吧
* 2、假设操作符非常多怎么办?总不能一个操作定义一个类吧。
*/
publicabstractclass Operation {
publicdoublenumberA;
publicdoublenumberB;
publicabstractdouble getResult();
}
2、加法算法,继承Operation就好了
publicclass OperationAddextendsOperation{
publicdouble getResult(){
returnnumberA +numberB;
}
}
3、减法算法。同理
publicclass OperationSubextendsOperation{
publicdouble getResult(){
returnnumberA -numberB;
}
}
4、乘除算法就略了,都是一样的。工厂类来了,功能就是要什么算法就生产什么算法
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;
}
}
5、好了,最后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());
}
}
6、附上UML类图,学会画类图非常重要啊
总结:编程是一门技术,更是一门艺术,不能满足于写完代码执行正常就完事,时常考虑怎样让代码更加简洁、更加easy维护、复用和可扩展,仅仅有这样才干不断提高。
写出优雅的代码是一种非常爽的事情。所谓学无止境。事实上这才是理解面向对象的開始呢。
附上源代码地址(csdn好像不能上传附件,仅仅能附上地址了):http://download.csdn.net/detail/jzhf2012/8082159