一.简单工厂模式就是对继承了同一父类的各种拓展功能子类进行封装,通过传入不同的参数判断实现不同实例化对象的模式。
二.情景模式:实现一个计算器的简单逻辑。
1.写一个算法类,这一类有两个特点:有两个待运算的数字和运算完之后需要返回一个结果。
public class Math {
private int numberA;
private int numberB;
public int getNumberA() {
return numberA;
}
public void setNumberA(int numberA) {
this.numberA = numberA;
}
public int getNumberB() {
return numberB;
}
public void setNumberB(int numberB) {
this.numberB = numberB;
}
public int getResult(){
return 0;
}
}
2.将需要算法功能(加,减,乘,除,开根号...)写成算法的子类。这样做的目的是对于每次新增算法或者修改算法内部逻辑,不对其他的算法功能产生影响。可以做到高内聚,低耦合,以及可拓展。
//加法
class add extends Math {
@Override
public int getResult() {
int numberA = getNumberA();
int numberB = getNumberB();
int result= numberA+numberB;
return result;
}
}
//减法
class sub extends Math {
@Override
public int getResult() {
int numberA = getNumberA();
int numberB = getNumberB();
int result= numberA-numberB;
return result;
}
}
3.工厂类,根据客户端的参数进行实例化不同功能的对象。这里代码设置为0为加法,1为减法。
(由于JDK1.7以下不支持swith(表达式)为string,所以用int)
public class Factory {
public Math getMath(int rule) {
Math math=null;
switch (rule) {
case 0:
math = new add();
break;
case 1:
math = new sub();
break;
default:
break;
}
return math;
}
}
4.客户端,开始计算
public class StartCalculate {
public static void main(String[] args) {
Factory factory = new Factory();
Math math = factory.getMath(1);
math.setNumberA(3);
math.setNumberB(7);
int result = math.getResult();
System.out.println(result);
}
}
5.计算结果
-4