关于简单模式的一点体会

 这几天看到关于设计模式的一些问题,关于模式的书籍,市面上有很多,看完之后自己总算有一点点有体会。下面我以计算机的实例来讲解一下简单工厂模式.

 现在我们试着写一个Windows的计算器.也许有些人认为很简单,很快就能写出下面类似的代码:

try{

        System.out.println("请输入数字A");

        int strNumberA=input.nextInt();

        System.out.println("请选择运算符号(+,-,*,/:)");

        String strOperate=input.next();

        System.out.println("请输入数字B:");

        int  strNumberB=input.nextInt();

        String strResult="";

        switch(strOperate.charAt(0)){

        case '+':

             strResult=strNumberA+strNumberB+"";

             break;

        case '-':

            strResult=strNumberA-strNumberB+"";

            break;

        case '*':

            strResult=strNumberA*strNumberB+"";

            break;

        case '/':

            if(strNumberB!=0){

            strResult=strNumberA/strNumberB+"";

            }else

               strResult="除数不能为0";

               break;

        }

        System.out.println("结果为"+strResult);

     }catch(Exception ex){

        System.out.println(ex.getMessage());

     }

虽然代码没有错,但是不是最好的。这种编程方式让我们的程序只为满足实现当前的需求,程序不容易维护,不容易扩展,更不容易复用,从而达不到高质量代码的需求。我们可以运用面向对象的分析设计编程思想,通过封装,继承,多态把程序的耦合度降低。用设计模式使得程序更加的灵活,容易修改,并且易用复用。

第一种方式:我们要让业务逻辑与界面逻辑分开,让他们之间的耦合度下降。那我们可以抽象出类, 再运用继承和多态。

第二种方式:在第易种方式的基础上,运用简单工厂模式。

说到简单工厂模式,我们来谈谈它的作用:用创建一个单独的类来做这个创造实例的过程。

我们知道,计算器界面无非就是接受数和运算符号。如果我们的计算当前已经完成了4种运算,如果现在需要增加一种运算呢,那我们只需要增加一个运算子类就可以了。

我们把代码修改一下:

运算类:

public class Operation {

    private double _numberA=0;

    private double _numberB=0;

    public double get_numberA() {

       return _numberA;

    }

    public void set_numberA(double numberA) {

       _numberA = numberA;

    }

    public double get_numberB() {

       return _numberB;

    }

    public void set_numberB(double numberB) {

       _numberB = numberB;

    }

    public  double GetResult(){

       double result=0;

       return result;

    }

 

}

加法类:

public class OperationAdd extends Operation{

   public double GetResult(){

       double result=0;

       result=get_numberA()+get_numberB();

       return result;

   }

}

其他的运算类类似,

运算工厂类:

public class OperationFactory {

    public static Operation createOperation(String operation){

       Operation oper=null;

       switch(operation.charAt(0)){

       case '+':

           oper=new OperationAdd();

           break;

       case '-':

           oper=new OperationSub();

           break;

       case '*':

           oper=new OperationMul();

           break;

       case '/':

           oper=new OperationDiv();

           break;

       }

       return oper;

    }

 

}

运算工厂类返回的都是运算类,具体是那种运算类,这将由用户输入的运算符来决定,如果我们需要其他的运算,我们只需要添加类似加法类的运算类,再在工厂里加一个switch分支就OK了,无需更加其他的代码。

测试类的代码如下:

System.out.println("请输入要进行的运算符:");

     Scanner input=new Scanner(System.in);

     String operation=input.next();

     Operation oper=OperationFactory.createOperation(operation);

     System.out.println("请输入第一个数:");

     double numberA=input.nextDouble();

     oper.set_numberA(numberA);

     System.out.println("请输入第二个数:");

     double numberB=input.nextDouble();

     oper.set_numberB(numberB);

     double result=oper.GetResult();

     System.out.println("结果是:"+result);

这样我们写出来的代码可扩展性就好很多。我们很多时候写代码,不是越小越好。还应该更多得考虑它的扩展性。让我们的代码更容易维护。

编程是一门技术,更是一门艺术,能写出优雅的代码更是一件很爽的事情。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值