1. 程式人生 > 其它 >設計模式----簡單工廠模式

設計模式----簡單工廠模式

/**
* 總結來說就是先寫一個抽象的父類
* 然後用具體的子類繼承這個父類 重寫父類中關鍵的抽象的方法
* 利用簡單工廠類去生產出具體的子類,簡單工廠裡面的方法是靜態方法,可以通過類名呼叫
* 在主函式中,用多型的方法,宣告抽象父類的引用,去例項化簡單工廠中的子類,然後這個物件就造好了,再進行操作即可。
*
*/

/**
* 抽象的運算子
*
* 以及它的四個子類
*
*/

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());

}
}