設計模式----簡單工廠模式
阿新 • • 發佈:2021-08-17
/**
* 總結來說就是先寫一個抽象的父類
* 然後用具體的子類繼承這個父類 重寫父類中關鍵的抽象的方法
* 利用簡單工廠類去生產出具體的子類,簡單工廠裡面的方法是靜態方法,可以通過類名呼叫
* 在主函式中,用多型的方法,宣告抽象父類的引用,去例項化簡單工廠中的子類,然後這個物件就造好了,再進行操作即可。
*
*/
/**
* 抽象的運算子
*
* 以及它的四個子類
*
*/
public abstract class Operation {
private double _numberA = 0;
private double _numberB = 0;
public double get_numberA() {
return _numberA;
}
public void set_numberA(double _numberA) {
this._numberA = _numberA;
}
public double get_numberB() {
return _numberB;
}
public void set_numberB(double _numberB) {
this._numberB = _numberB;
}
public abstract double GetResult();
}
class OperationAdd extends Operation{
@Override
public double GetResult(){
return get_numberA()+get_numberB();
}
}
class OperationSub extends Operation{
@Override
public double GetResult(){
return get_numberA()-get_numberB();
}
}
class OperationMul extends Operation{
@Override
public double GetResult(){
return get_numberA()*get_numberB();
}
}
class OperationDiv extends Operation{
@Override
public double GetResult(){
try {
return get_numberA()/get_numberB();
}
catch (NumberFormatException e)
{
System.out.println("除數不能為0!");
}
return get_numberA()/get_numberB();
}
}
/**
*
* 簡單工廠模式,生產出操作符
*
* 用的是靜態方法 這樣就不用造物件了
*/
public class OperationFactory {
public static Operation createOperation(String operator)
{
Operation oper = null;
switch(operator)
{
case "+": oper = new OperationAdd(); break;
case "-": oper = new OperationSub(); break;
case "*": oper = new OperationMul(); break;
case "/": oper = new OperationDiv(); break;
}
return oper;
}
}
/**
* 對程式的終極追求:可維護、可複用、可拓展、靈活性好
* 程式設計有一原則:用盡可能的方法去避免重複
*
* 緊耦合 VS 鬆耦合
*/
public class ProgramTest {
public static void main(String[] args) {
Operation oper = OperationFactory.createOperation("+"); //體現了多型性,因為左邊是Operation的引用,而右邊是生產出了它的子類
oper.set_numberA(1);
oper.set_numberB(2);
System.out.println(oper.GetResult());
}
}