工廠模式(簡單工廠模式)快速理解
工廠模式
一個工廠類根據傳入的引數,
動態的決定應該建立哪一個產品類
(產品類都繼承或實現於一個父類或介面),自動建立並返回例項
使用場景
工廠類負責建立的物件較少,呼叫者只知道傳入引數,對於如何建立物件的邏輯不關心
舉例
例子中展示的是輸入金額,計算實際應收金額
沒有使用工廠模式之前是這樣呼叫的:
RebateCash rebateCash = new RebateCash(300,100);
double result = rebateCash.acceptCash(300);
System.out.println("result = " + result);
使用了之後,呼叫是這樣的:
ICash cs = CashFactory.createCashAccept("打8折");
double result = cs.acceptCash(300);
System.out.println("result = " + result);
接下來檢視具體的程式碼:
/**
* 現金工廠
*
* @author 遊四七
* @date 2020/10/20
*/
public class CashFactory {
/**
* 建立cash
*
* @param type
* @return
*/
public static ICash createCashAccept(String type) {
ICash cash = null;
// 建立的物件可能需要很多步驟,這裡統一一個地方建立並返回物件
switch (type) {
case "正常收費":
cash = new NormalCash();
case "打8折":
cash = new DiscountCash(8);
case "滿300減100":
cash = new RebateCash(300, 100);
default:
break;
}
return cash;
}
}
/**
* 計算金額的介面
*
* @author 遊四七
* @date 2020/10/20
*/
public interface ICash {
/**
* 計算應收的費用
*
* @param money 接收的錢
* @return 實際收的錢
*/
double acceptCash(double money);
}
/**
* 正常收費
*
* @author 遊四七
* @date 2020/10/20
*/
public class NormalCash implements ICash{
@Override
public double acceptCash(double money) {
return money;
}
}
/**
* 返利
*
* @author 遊四七
* @date 2020/10/20
*/
public class RebateCash implements ICash {
/**
* 滿多少
*/
private double moneyCondition;
/**
* 返利金額
*/
private double rebateMoney;
public RebateCash(double moneyCondition, double rebateMoney) {
this.moneyCondition = moneyCondition;
this.rebateMoney = rebateMoney;
}
@Override
public double acceptCash(double money) {
if (money >= moneyCondition) {
return money - rebateMoney;
}
return money;
}
}
/**
* 打折
*
* @author 遊四七
* @date 2020/10/20
*/
public class DiscountCash implements ICash {
/**
* 折扣率
*/
private double moneyRebate;
/**
* 折扣率
*
* @param moneyRebate
*/
public DiscountCash(double moneyRebate) {
this.moneyRebate = moneyRebate;
}
@Override
public double acceptCash(double money) {
return money * moneyRebate;
}
}
關係圖:
角色說明
工廠類角色(CashFactory)
:本模式的核心,含有一定的商業邏輯和判斷邏輯,用來建立產品抽象產品角色(ICash)
:一般指具體產品繼承的父類或實現的介面具體產品角色(DiscountCash、NormalCash...)
:工廠類建立的就是這個角色的例項,實現抽象產品角色
優缺點
優點
- 呼叫者可以從
直接建立具體產品物件
的尷尬局面中擺脫出來 - 與外界隔離開來,
耦合性低
缺點
- 所有建立類都集中在工廠類,一旦增加或減少某個產品,需要
頻繁修改
工廠類,無法動態擴充套件 - 簡單工廠通常使用靜態方法,使得無法由子類
繼承
相關文章
- 工廠模式之簡單工廠模式模式
- 簡單工廠模式、工廠模式、抽象工廠模式比較模式抽象
- 設計模式-簡單工廠、工廠方法模式、抽象工廠模式設計模式抽象
- 簡單工廠模式和抽象工廠模式模式抽象
- 一篇搞定工廠模式【簡單工廠、工廠方法模式、抽象工廠模式】模式抽象
- 設計模式之工廠模式!深入解析簡單工廠模式,工廠方法模式和抽象工廠模式設計模式抽象
- C# 設計模式(1)——簡單工廠模式、工廠模式、抽象工廠模式C#設計模式抽象
- 【Java】簡單工廠模式、工廠模式、介面卡模式Java模式
- 建立型:工廠模式-簡單工廠模式
- 簡單工廠模式模式
- 簡單工廠模式、工廠方法模式和抽象工廠模式有何區別?模式抽象
- 簡單工廠、工廠模式初學習模式
- aardio 簡單工廠模式模式
- 設計模式 - 簡單工廠模式設計模式
- 【設計模式】簡單工廠模式設計模式
- 設計模式之簡單工廠模式設計模式
- 設計模式(一)—— 簡單工廠模式設計模式
- java設計模式-簡單工廠模式Java設計模式
- 秒懂簡單工廠模式模式
- 設計模式----簡單工廠設計模式
- C++ - 簡單工廠模式C++模式
- Python 實現工廠模式、抽象工廠,單例模式Python模式抽象單例
- 無廢話設計模式(1)--簡單工廠、工廠方法、抽象工廠設計模式抽象
- golang設計模式之簡單工廠模式Golang設計模式
- 設計模式入門-簡單工廠模式設計模式
- 掌握設計模式之簡單工廠模式設計模式
- JAVA設計模式 3【建立型】理解工廠模式與抽象工廠模式Java設計模式抽象
- 簡單工廠模式( Simple Factory Pattern )模式
- 深入理解工廠模式模式
- 設計模式-工廠模式二(工廠方法模式)設計模式
- 別隻知道策略模式+簡單工廠,試試更香的策略模式+抽象工廠!模式抽象
- Java常用設計模式之簡單工廠模式Java設計模式
- 設計模式系列之一:簡單工廠模式設計模式
- 設計模式 --並不簡單的工廠模式設計模式
- Yii2設計模式——簡單工廠模式設計模式
- 極簡設計模式-工廠模式設計模式
- 建立型模式-單例模式-工廠模式模式單例
- c#簡單工廠設計模式C#設計模式