簡單工廠模式的java實現例子
阿新 • • 發佈:2019-01-11
說明:本文是《大話設計模式》一書的學習文摘和網上相關資訊文摘,原書程式碼例子用C#寫,下面用Java改寫。
1、簡單工廠模式是屬於建立型模式,又叫做靜態工廠方法模式。
它的實現方式是由一個工廠類根據傳入的引數,動態決定應該建立哪一個產品類(這些產品類繼承自一個父類或介面)的例項。
2、簡單工廠模式由三種角色組成:
(1)工廠角色:簡單工廠模式的核心,它負責實現建立所有例項的內部邏輯。工廠類的建立產品類的方法可以被外界直接呼叫,建立所需的產品物件。
(2)抽象產品角色:簡單工廠模式所建立的所有物件的父類,它負責描述所有例項所共有的公共介面。
(3)具體產品角色:是簡單工廠模式的建立目標,所有建立的物件都是充當這個角色的某個具體類的例項。
3、簡單工廠模式的UML類圖:
4、下面實現了一個加減乘除的簡單工廠模式
package demo1; public abstract class Operation { private double numberA = 0; private double numberB = 0; public void setNumberA(double numberA) { this.numberA = numberA; } public void setNumberB(double numberB) { this.numberB = numberB; } public double getNumberA() { return numberA; } public double getNumberB() { return numberB; } public double getResult() { double result = 0; return result; } } package demo1; public class OperationAdd extends Operation { @Override public double getResult() { double result = 0; result = super.getNumberA() + super.getNumberB(); return result; } } package demo1; public class OperationSub extends Operation { @Override public double getResult() { double result = 0; result = super.getNumberA() - super.getNumberB(); return result; } } package demo1; public class OperationMul extends Operation { @Override public double getResult() { double result = 0; result = super.getNumberA() * super.getNumberB(); return result; } } package demo1; public class OperationDiv extends Operation { @Override public double getResult() { double result = 0; if (super.getNumberB() == 0) throw new ArithmeticException("除數不能為0."); result = super.getNumberA() / super.getNumberB(); return result; } } package demo1; public class OperationFactory { public static Operation createOperate(String operate) { Operation oper = null; switch (operate) { case "+": oper = new OperationAdd(); break; case "-": oper = new OperationSub(); break; case "*": oper = new OperationMul(); break; case "/": oper = new OperationDiv(); break; } return oper; } } package demo1; public class Demo1 { public static void main(String[] args) { Operation oper; oper = OperationFactory.createOperate("/"); oper.setNumberA(10); oper.setNumberB(7); double result = oper.getResult(); System.out.println(result); } }