大话设计模式之简单工厂模式

题目:请用任意一种面向对象语言实现一个计算器控制台程序,要求输入两个数和运算符号,得到结果。

        编程初学者,遇到问题时自觉地用计算机的方式去解决,即用计算机能够理解的逻辑来描述和解决问题及具体的求解过程。导致程序不易于维护、扩展和复用。

        一、面向对象

        1.活字印刷是面向对象的现实体现

        在活字印刷出现之前,需要将印刷的内容刻到木板上,如果有修改、顺序调整等要求时,必须重新刻制印刷板。活字印刷是将汉字刻到一个一个小方块上,印刷文章时只需排版即可。那么刻到方块的汉字就是面向对象的体现。

        面向对象的几点理解:

        (1)一切皆是对象。

        (2)类:具备某些共同特性(属性/数据)和行为(操作/功能)的实体的集合,是一个抽象的概念。

        (3)对象:人们要研究的任何事物,是一个具体的概念。

        (4)类是对象的抽象,对象是类的实例化。          

        2.面向对象的好处

        通过封装、继承、多态降低程序的耦合度,设计模式可以使程序易于修改、易于扩展、便于复用。

        面向对象的三大特性:

        (1)封装性:将相同的属性和行为合并成新的数据类型(类)。通过对具体实施细节(属性)的隐藏(private),可以将接口(行为)和属性分离。易于修改

        (2)继承性(extends):基础类(父类)不能满足我们的需求,可以通过继承父类创建新类(子类),在子类中添加新的功能。易于复用

        (3)多态性:将接口从具体的实施细节(属性)中分离出来,即实现“是什么”与“做什么”两个模块的分离。易于扩展

        二、简单工厂模式

        到底要实例化谁,将来会不会增加新的实例化对象,比如增加开根运算,这是容易变化的地方,因此单独用一个类完成构造实例的过程,这个类就是工厂。题目的简单工厂UML图如下所示:

        

        运算类

public class Operation {
    private double numberA = 0;
    private double numberB = 0;

    public double getResult(){
        double result = 0;
        return result;
    }

    public double getNumberA() {
        return numberA;
    }

    public void setNumberA(double numberA) {
        this.numberA = numberA;
    }

    public double getNumberB() {
        return numberB;
    }

    public void setNumberB(double numberB) {
        this.numberB = numberB;
    }
}

        加减类

public class OperationAdd extends Operation{

    public double getResult(){
        double result = 0;
        result = getNumberA() + getNumberB();
        return result;
    }

}
public class OperationSub extends Operation{

    public double getResult(){
        double result = 0;
        result = getNumberA() - getNumberB();
        return result;
    }
}

        简单运算工厂类

public class OperationFactory {

    public static Operation createOperate(String operate){
        Operation operation = null;
        switch (operate){
            case "+":
                operation = new OperationAdd();
                break;
            case "-":
                operation = new OperationSub();
                break;
        }
        return operation;
    }

    public static void main(String[] args) {
        Operation operation = createOperate("+");
        if (operation != null){
            operation.setNumberA(1);
            operation.setNumberB(2);
            System.out.println("运算结果:"+operation.getResult());
        }
    }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值