第一章 代碼無錯就是優(yōu)?-簡單工廠模式
所有編程初學(xué)者都會有這樣的問題,就是碰到問題就直覺地用計算機能夠理解的邏輯來描述和表達(dá)待解決的問題及具體的求解過程,這其實是用計算機的方式去思考。但這樣的思維卻使得我們的程序只為滿足實現(xiàn)當(dāng)前的需求,程序不容易維護(hù),不容易擴(kuò)展,更不容易復(fù)用,從而達(dá)不到高質(zhì)量代碼的要求。
簡單工廠模式
就是建立一個工廠類,對實現(xiàn)了同一抽象類的一些類進(jìn)行實例的創(chuàng)建。簡單工廠模式的實質(zhì)是由一個工廠類根據(jù)傳入的參數(shù),動態(tài)決定應(yīng)該創(chuàng)建哪一個產(chǎn)品類(這些產(chǎn)品類繼承自一個父類或接口)的實例。

1. 統(tǒng)一的抽象類
/**
* 操作的抽象類
*/
public abstract class Operation {
public double numberA;
public double numberB;
public abstract double result();
}
2. 加法類
/**
* 加法
*/
public class OperationAdd extends Operation{
@Override
public double result() {
return numberA + numberB;
}
}
3. 減法類
/**
* 減法
*/
public class OperationSub extends Operation {
@Override
public double result() {
return numberA - numberB;
}
}
4. 乘法類
/**
* 乘法
*/
public class OperationMul extends Operation {
@Override
public double result() {
return numberA * numberB;
}
}
5. 除法類
/**
* 除法
*/
public class OperationDiv extends Operation {
@Override
public double result() {
if (numberB == 0) {
throw new RuntimeException("divided by 0");
}
return numberA / numberB;
}
}
6. 簡單工廠類
/**
* 操作的工廠類
*/
public class OperationFactory {
public static Operation createOperation(char operator) {
Operation operation = null;
switch (operator) {
case '+':
operation = new OperationAdd();
break;
case '-':
operation = new OperationSub();
break;
case '*':
operation = new OperationMul();
break;
case '/':
operation = new OperationDiv();
break;
default:
throw new RuntimeException("unsupported operation");
}
return operation;
}
}
7. 使用工廠方法生成實例完成運算操作
/**
* 使用工廠方法生成實例完成運算操作
*/
public class Calculator {
public static void main(String[] args) {
Operation operation;
char operator;
operator = '+';
operation = OperationFactory.createOperation(operator);
operation.numberA = 10;
operation.numberB = 100;
System.out.println(operation.result());
}
}
1.活字印刷,面向?qū)ο?/h4>
- 要改,只需更改要改之字,此為可維護(hù)
- 這些字并非用完這次就無用,完全可以在后來的印刷中重復(fù)使用,此乃可復(fù)用
- 此時若要加字,只需另刻字加入即可,這是可擴(kuò)展
- 字的排列其實可能是豎排可能是橫排,此時只需將活字移動就可做到滿足排列需求,此時靈活性好
火藥,指南針,造紙術(shù)都是從無到有,從未知到發(fā)現(xiàn)的偉大發(fā)明,而活字印刷僅僅是從刻板印刷到活字印刷的一次技術(shù)上的進(jìn)步。
中國古代的四大發(fā)明,另三種應(yīng)該都是科技的進(jìn)步,偉大的創(chuàng)造或發(fā)現(xiàn),而唯有活字印刷,實在是思想的成功,面向?qū)ο蟮膭倮?/p>
通過封裝,繼承,多態(tài)把程序的耦合度降低。
設(shè)計模式使得程序更加的靈活,容易修改,并且易于復(fù)用。
編程有一原則:就是用盡可能的辦法去避免重復(fù)
讓業(yè)務(wù)邏輯和界面邏輯分開,讓它們之間的耦合度降低。只有分離開,才可以達(dá)到容易維護(hù)和擴(kuò)展。
簡單工廠模式
到底要實例化誰,將來會不會增加實例化的對象,比如增加開根運算,這是很容易變化的地方,應(yīng)該考慮用一個單獨的類來做這個創(chuàng)造實例的過程,這就是工廠。