大话设计模式-1.简单工厂模式

来源:互联网 发布:淘宝店铺可以改几次 编辑:程序博客网 时间:2024/05/17 02:45

期末考试结束了,可以把心思用来学习了.

从网上找了好多本书,有gof的设计模式,还有一本仿照gof写的一本更易懂的设计模式,还有head first的设计模式....找到了好多..

针对我这样的 没什么逻辑思维的 选了一本 大话设计模式 作为设计模式的第一本读物 不知道会不会有第二本 最近的大部分时间就用来看这本书吧

虽然学过c++,学过java,但是写起代码来就不知道该怎么规划.其实我自己也清楚 自己顶多就是学会了 基于对象的的语言,根本谈不上面向对象,OOP编程.

让我体会书中的智慧吧..

这本书 用c#写的,我不用c# ,就尽量用 java实现书中的代码吧.  写代码是个费时费力的活.尽量自己能坚持下来. 时间不多,事情不少.Go on!

大牛们写的笔记 我是写不来的. 我觉得 学习就是一个循序渐进的过程,每个人都是从最基本的地方入手,然后慢慢思考,慢慢总结,才能体会其中的思想,

急是急不来的..


1.简单工厂模式---------->  实现 计算器



当我们需要产生计算的时候,可以先声明一个计算类,通过抽象函数 将 计算的 方法延迟到计算的子类中确定.

这么做的好处是 如果要添加一种新的运算方法 比如 乘法 开根号.....只要新增一个Operator子类,并同时修改一下工厂类就好了.


package a;public abstract class Operation {protected double a=0 ;protected double b=0 ;abstract public double GetResult() throws Exception;public double getA() {return a;}public void setA(double a) {this.a = a;}public double getB() {return b;}public void setB(double b) {this.b = b;}}

package a;public class OperatorAdd extends Operation{public double GetResult() {// TODO Auto-generated method stubdouble result=0;result=a+b;return result;}}

package a;public class OperatorDiv extends Operation {@Overridepublic double GetResult() throws Exception {// TODO Auto-generated method stubif(b==0)  throw new Exception();else return a/b;}}

package a;public class OperatorMul extends Operation {@Overridepublic double GetResult() {// TODO Auto-generated method stubreturn a*b;}}

package a;public class OperatorSub extends Operation {@Overridepublic double GetResult() {double result=0;result=a-b;return result;}}

package a;public class OperatorFactory{public static Operation CreateOperation(String oper){switch(oper.charAt(0)){case '+':return new OperatorAdd();case '-':return new OperatorSub();case '*':return new OperatorMul();case '/':return new OperatorDiv();}return null;}}

package a;import java.util.Scanner;public class UI {public static void main(String []args)  {// TODO Auto-generated method stubScanner in = new Scanner(System.in);double a,b;String str;System.out.println("请输入操作数1:");a=in.nextDouble();System.out.println("请输入操作数2:");b=in.nextDouble();System.out.println("请输入运算符::");str=in.next();Operation oper=OperatorFactory.CreateOperation(str);oper.setA(a);oper.setB(b);double result=0;try {result = oper.GetResult();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("结果:"+oper.getA()+str+oper.getB()+"="+result);}}


思考:  定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。


0 0
原创粉丝点击