欢迎使用CSDN-markdown编辑器
来源:互联网 发布:ps淘宝店标图片制作 编辑:程序博客网 时间:2024/04/24 07:13
**做java开发也有一段时间了,感觉在编写代码的过程中,写出来的代码并不尽如人意,健壮性、可扩展性比较差,所以拿起《大话设计模式》这本书,打算再夯实一下基础,平时工作比较忙,我就一周写一篇学习笔记吧,(把书中的代码通过java实现一下),算是鞭策自己^_^。****第一章:简单工厂模式;实现计算器。**
//计算器抽象类public abstract class Operate { //我们默认只做两个数的运算,这是抽象计算方法 protected abstract double cal(double a,double b);}
抽象计算类完成了,接下来,我们再加上几个具体实现类,也即子类来继承并实现它;
//只能运行加法的计算器,继承抽象类,并重写它的方法public class Add extends Operate { @Override protected double cal(double a, double b) { //返回两个数之和 return a+b; }}
再来一个减法计算器
//只能运行减法的计算器public class Sub extends Operate { @Override protected double cal(double a, double b) { // 两个数之差 return a-b; }}
关键人物来了,简单工厂类
//简单工厂public class Factory { //生产各式各样的计算器 public static Operate create(String a)throws Exception{ Operate op=null; switch(a){ case "+": op=new Add(); break; case "-": op=new Sub(); break; default: System.out.println("请输入正确的运算符号!"); break; } return op; }}
测试类
public class Test { public static void main(String[] args) { Operate opeAdd = Factory.create("+"); System.out.println("和:"+opeAdd.cal(1, 2)); Operate opeSub = Factory.create("-"); System.out.println("差:"+opeSub.cal(1, 2)); }}
如果要加个新类型的计算器呢?比如乘法计算器,很简单,再加一个新的乘法类,然后在工厂中开一条新的生产线就行了。
//乘法计算器public class Mult extends Operate { @Override protected double cal(double a, double b) { // TODO Auto-generated method stub return a*b; }}
新加一条生产线
public class Factory { public static Operate create(String a)throws Exception{ Operate op=null; switch(a){ case "+": op=new Add(); break; case "-": op=new Sub(); break; case "*": op=new Mult(); break; default: System.out.println("请输入正确的运算符号!"); break; } return op; }}
测试
public class Test { public static void main(String[] args) { Operate opeMut = Factory.create("*"); System.out.println(opeMut.cal(1, 2)); }}
简单工厂模式利用了封装,继承,多态这三大面向对象的特征,做到了解耦合,提升了程序的可拓展性、复用性,如果不这么写的话,你可以想象很low的代码到底有多惨,比如下面这个反例:
//计算器public class Calculate { protected double add(double a,double b){ return a+b; } protected double sub(double a,double b){ return a-b; } protected double mult(double a,double b){ return a*b; }}
这样写,看似简单,但是以后要加功能,就必须改动这个类,这就会把这个类的源码暴露出来,万一在改动的过程中,不小心误改了其他方法,也是非常不好的,而且一个功能和另外几个功能强耦合在一起,对程序的维护成本非常高。而用了简单工厂模式,在加入新功能时,并不会接触到其他功能,这样就大大减小了耦合度,真正实现了高内聚、低耦合,逼格瞬间提升不少,哈哈
0 0
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- JVM学习 第1课 解析命令行 打开jvm之门
- java数据序列化与反序列化
- 欢迎使用CSDN-markdown编辑器
- 网站图片优化的方式解析
- 深入理解Java:类加载机制及反射
- 欢迎使用CSDN-markdown编辑器
- sql执行原理,过程详述
- Kaggle竞赛入门教程之Kaggle简介(新手向)
- web网络安全——网站入侵(一)
- eclipse中Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds
- 如何才能写出软文有分量的标题
- seo优化我们常常需要思考的几个点
- 如何将PDF转为word
- 现如今seo优化的趋势