1. 程式人生 > >設計模式從零開始——簡單工廠模式

設計模式從零開始——簡單工廠模式

程式碼無措就是優?

這個顯然不對。程式碼擴充套件性強,耦合度低、複用度高和程式碼能完整實現業務功能同樣重要。


面向物件的程式設計思想指出,好的程式碼應該是把業務拆分成一個一個獨立的模組,模組之間通過某種關係組裝到一起就能實現特定的功能。

後期修改或者增加需求的時候,也只需要修改特定模組的內容,不會對整體的程式碼結構造成影響。


筆者也是java開發的菜鳥一枚,以往大多數編寫的程式碼都缺少面向物件的思想,現在工作中逐漸體現出各種弊端,例如程式碼難以維護,

實現功能程式碼量過多、程式碼邏輯複雜可讀性低等等,故現在決定研究設計模式相關知識,把開發工作從本質思想上進行改善。


第一節要學習的設計模式是【簡單工廠模式】,本質上這種模式就是把業務進行拆分,可擴充套件性的功能單獨作為一個模組編寫,最後再

用一個總體排程的模組,確定具體要執行哪一種功能。

比如開發一個計算器的功能。首先需要把介面展現和業務功能完全獨立開來。分成不同模組去編寫。之後考慮到計算機的基礎功能運算有:

加、減、乘、除。就把這四種功能分別寫出,最後通過排程工廠類來確定要實現具體哪一種功能。


相比於傳統的寫法,簡單工廠模式的好處在於如果之後需要增加求平方、開方等功能,只要新增相應的方法,在排程類中增加該方法的判斷,

其餘的功能都不需要進行改動。(頁面調整除外)一定程度愛上增加了程式碼的靈活性,方便後期對功能進行擴充套件。


以下是簡單工廠模式的計算機後臺功能部分程式碼:

1、基礎功能類

/**
 * 操作類
 */
public class Operator {
    private double number_A = 0;
    private double number_B = 0;

    public double getNumber_A() {
        return number_A;
    }

    public void setNumber_A(double number_A) {
        this.number_A = number_A;
    }

    public double getNumber_B() {
        return number_B;
    }

    public void setNumber_B(double number_B) {
        this.number_B = number_B;
    }

    public double getResult() {
        double result = 0;
        return result;
    }
}

2、具體功能方法:

public class OperatorAdd extends Operator {
    @Override
    public double getResult() {
        double result = 0;
        result = getNumber_A() + getNumber_B();
        return result;
    }
}

public class OperatorSub extends Operator {
    @Override
    public double getResult() {
        double result = 0;
        result = getNumber_A() - getNumber_B();
        return result;
    }
}

public class OperatorMul extends Operator {
    @Override
    public double getResult() {
        double result = 0;
        result = getNumber_A() * getNumber_B();
        return result;
    }
}

public class OperatorDiv extends Operator {
    @Override
    public double getResult() {
        double result = 0;
        if (getNumber_B() == 0) {
            new Exception("除數不能為0");
        }
        result = getNumber_A() / getNumber_B();
        return result;
    }
}

3、工廠類:

/**
 * 工廠類
 */
public class OperationFactory {
    public static Operator createOperator(String operator) {
        Operator oper = null;
        switch (operator) {
            case "+":
                oper = new OperatorAdd();
                break;
            case "-":
                oper = new OperatorSub();
                break;
            case "*":
                oper = new OperatorMul();
                break;
            case "/":
                oper = new OperatorDiv();
                break;
        }
        return oper;
    }
}

4、具體操作方法:

public class Caculator {
    public static void main(String[] args) {
        Operator operator;
        operator = OperationFactory.createOperator("/");
        operator.setNumber_A(3);
        operator.setNumber_B(4);
        double result = operator.getResult();
        System.out.println(result);
    }
}