1. 程式人生 > >《大話設計模式》java實現之簡單工廠模式

《大話設計模式》java實現之簡單工廠模式

《大話模式》這本書寫得不錯,可惜不是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為什麼是關聯關係???