您的位置:首页 > 其它

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

2014-06-15 11:15 211 查看
期末考试结束了,可以把心思用来学习了.

从网上找了好多本书,有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 stub
double result=0;
result=a+b;
return result;
}

}

package a;

public class OperatorDiv extends Operation {

@Override
public double GetResult() throws Exception {
// TODO Auto-generated method stub
if(b==0)  throw new Exception();
else return a/b;

}

}

package a;

public class OperatorMul extends Operation {

@Override
public double GetResult() {
// TODO Auto-generated method stub
return a*b;
}

}

package a;

public class OperatorSub extends Operation {

@Override
public 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 stub
Scanner 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 block
e.printStackTrace();
}

System.out.println("结果:"+oper.getA()+str+oper.getB()+"="+result);

}
}


思考:  定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: