工廠方法模式
在簡單工廠模式中,由工廠類進行運算的實例化,此時工廠類包含了已編寫好的運算類。此時如果有新的運算需求,則需要更改工廠類的代碼,這就違背了面向對象的開放封閉原則,即類對外開放擴展,對內封閉修改。
工廠方法模式很好的解決了這一問題,工廠方法將運算類的實例抽象爲一個接口ComputeFactory
,該接口有一個創建運算實例的方法CreateOperation()
,然後每個運算類創建一個工廠並實現該接口。
public class AddFactory implements ComputeFactory{
@Override
public Operation CreateOperation() {
return new Add();
}
}
當客戶端需要某個運算類時,先生成該運算類的工廠,然後執行實例方法。
ComputeFactory operFactory = new MulFactory();
Operation operation1 = operFactory.CreateOperation();
operation1.setNum1(1);
operation1.setNum2(3);
System.out.println(operation1.getResult());
與簡單工廠方法相比,工廠方法將運算的選擇權交給了客戶端。
外觀模式
外觀模式(Facade Pattern)隱藏系統的複雜性,並向客戶端提供了一個客戶端可以訪問系統的接口。這種類型的設計模式屬於結構型模式,它向現有的系統添加一個接口,來隱藏系統的複雜性。
也就是說,將一系列操作,封裝到一個類中,然後客戶端提供該類的接口,客戶端直接使用即可。
外觀類
public class Facade {
private Operation add;
private Operation mul;
public Facade(){
add = new Add();
mul = new Mul();
}
public double getResult(int num1,int num2, int num3){
add.setNum1(num1);
add.setNum2(num2);
mul.setNum1(add.getResult());
mul.setNum2(num3);
return mul.getResult();
}
}
客戶端調用
Facade facade = new Facade();
System.out.println(facade.getResult(1,2,3));
與策略模式不同:外觀者強調封裝多個類的多個任務,策略強調類自己的任務