《大話設計模式》java實現之簡單工廠模式
阿新 • • 發佈:2019-01-29
《大話模式》這本書寫得不錯,可惜不是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為什麼是關聯關係???