欢迎使用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