《大话模式》这本书写得不错,可惜不是java版,现在有空,想着用java实现一下,写到哪算哪
UML图
代码结构图
public class Client {
public static void main(String[] args) {
Operation operation = OperationFactory.createOperation("+");
operation.setNumberA(1);
operation.setNumberB(2);
double result = operation.getResult();
System.out.println("result " + result);
}
}
public abstract class Operation {
private double numberA = 0;
private double numberB = 0;
public abstract double getResult();
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 {
@Override
public double getResult() {
return this.getNumberA() + this.getNumberB();
}
}
public class OperationFactory {
public static Operation createOperation(String operate) {
Operation operation = null;
switch (operate) {
case "+":
operation = new OperationAdd();
break;
case "-":
operation = new OperationSub();
break;
default:
break;
}
return operation;
}
}
public class OperationSub extends Operation {
@Override
public double getResult() {
return getNumberA() - getNumberB();
}
}
书中还有乘法、除法,以及可以扩展的n次幂算法,这里省略,方便查看。
运行结果
个人总结:
1.UML图
在简单工厂中,OperationFactory和OperationAdd、OperationSub是依赖关系,而不是关联关系,原因如下:
1.1聚合关系、合成关系都属于关联关系(has-a),是特殊的关联关系,聚合关系时比较弱的“拥有”关系(如大雁与雁群),合成关系是比较强的“拥有”关系(如大雁与翅膀)
1.2依赖关系(user-a):A类的变化引起B类的变化,则B依赖于A,具体表现为在某个类的方法使用另一个类对象作为参数,如局部变量(关联关系是全局变量)、方法参数或静态方法调用
Driver类的drive(Car car)方法与Car类。
没想懂Client和OperationFactory为什么是关联关系???