设计模式-简单的工厂模式

    技术2022-06-22  50

    之前了解一些设计模式,只是粗略的了解到设计模式的名称,对各种设计模式并不懂。听闻说大话设计模式这本书不错,近来下载其电子版以学之,初读第一章,无事以记之。

      对于一个简单的计算器我们该如何设计,能达到面向对象的特点,达到最优的设计。面向对象的设计思想,通过封装、继承、多态把程序的耦合度降低,用设计模式使程序更加的灵活,容易修改,并且易于复用。计算器设计结构图如下:

     

    用java实现代码如下:

     

    运算类

    public class Operation {  private double numberA; private double numberB;  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  double getResult() throws Exception {  return 0; }}

     

     

    加减乘除类

    public class OperationAdd extends Operation {  public double getResult() {    return getNumberA() + getNumberB(); }}

     

     

    public class OperationSub extends Operation {

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

     

    public class OperationMul extends Operation {

     public double getResult() {    return getNumberA() * getNumberB(); }}

     

     

    public class OperationDiv extends Operation {

     public double getResult() throws Exception {    if (getNumberB() == 0)  {   throw new Exception("除数不能为零");  }  return getNumberA() / getNumberB(); }}

     

    简单的工厂类

    public class OperationFactory {

     public static Operation createOperate(char operate) {  Operation op = null;  switch (operate)  {  case '+':   op = new OperationAdd();   break;     case '-':   op = new OperationSub();   break;     case '*':   op = new OperationMul();   break;     case '/':   op = new OperationDiv();   break;      }    return op; }}

    测试类,简单客户端了,呵呵

    public class Calculator {

     public static void main(String[] args) {  Operation op;  op = OperationFactory.createOperate('+');  op.setNumberA(1);  op.setNumberB(2);  double result;  try {   result = op.getResult();   System.out.print(result);  } catch (Exception e) {   // TODO Auto-generated catch block   e.printStackTrace();  } }}

    以后就是我学习工厂模式的一点笔记,有错的地方,请大家指正。


    最新回复(0)