設計模式之工廠方法模式與外觀模式

工廠方法模式

在簡單工廠模式中,由工廠類進行運算的實例化,此時工廠類包含了已編寫好的運算類。此時如果有新的運算需求,則需要更改工廠類的代碼,這就違背了面向對象的開放封閉原則,即類對外開放擴展,對內封閉修改。
工廠方法模式很好的解決了這一問題,工廠方法將運算類的實例抽象爲一個接口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));

策略模式不同:外觀者強調封裝多個類的多個任務,策略強調類自己的任務

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章