目錄
一、簡介
二、簡單工廠模式
三、工廠方法模式
四、抽象工廠模式
五、總結
一、簡介
工廠模式主要是為創建物件提供過渡介面,以便將創建物件的具體程序屏蔽隔離起來,達到提高靈活性的目的,
工廠模式有三種:簡單工廠模式、工廠方法模式、抽象工廠模式,
二、簡單工廠模式
簡單工廠模式由三類角色組成:抽象產品、具體產品、工廠類,
抽象產品(寶馬):
public abstract class BWM {
/**
* 寶馬介紹
*/
abstract void introduce();
}
具體產品(寶馬三系、寶馬五系):
public class BWM320 extends BWM {
@Override
void introduce() {
System.out.println("寶馬三系");
}
}
public class BWM525 extends BWM {
@Override
void introduce() {
System.out.println("寶馬五系");
}
}
工廠類(寶馬三五系生產車間):
public class BWMFactory {
/**
* 寶馬生產
*
* @param type 寶馬型號
* @return 寶馬
*/
public static BWM makeBWM(int type) {
switch (type) {
case 320:
return new BWM320();
case 525:
return new BWM525();
default:
break;
}
return null;
}
}
呼叫:
public class Customer {
public static void main(String[] args) {
// 生產寶馬三系
BWM bwm320 = BWMFactory.makeBWM(320);
// 生產寶馬五系
BWM bwm525 = BWMFactory.makeBWM(525);
}
}
優點:
1、將產品交由工廠創建,使用方無需關心產品創建細節,實作了創建與使用的解耦,
缺點:
1、違背 “開閉原則”(對擴展開放,對修改封閉),新增產品(寶馬七系)不得不修改工廠類邏輯,
三、工廠方法模式
工廠方法模式由四類角色組成:抽象產品、具體產品、抽象工廠、具體工廠,
抽象產品(寶馬):
public abstract class BWM {
/**
* 寶馬介紹
*/
abstract void introduce();
}
具體產品(寶馬三系、寶馬五系):
public class BWM320 extends BWM {
@Override
void introduce() {
System.out.println("寶馬三系");
}
}
public class BWM525 extends BWM {
@Override
void introduce() {
System.out.println("寶馬五系");
}
}
抽象工廠(寶馬生產車間):
public abstract class Factory {
/**
* 寶馬生產
*
* @return 寶馬
*/
abstract BWM makeBWM();
}
具體工廠(寶馬三系生產車間、寶馬五系生產車間):
public class BWM320Factory extends Factory {
@Override
BWM makeBWM() {
return new BWM320();
}
}
public class BWM525Factory extends Factory {
@Override
BWM makeBWM() {
return new BWM525();
}
}
呼叫:
public class Customer {
public static void main(String[] args) {
// 生產寶馬三系
Factory bWM320Factory = new BWM320Factory();
BWM bwm320 = bWM320Factory.makeBWM();
// 生產寶馬五系
Factory bWM525Factory = new BWM525Factory();
BWM bwm525 = bWM525Factory.makeBWM();
}
}
優點:
1、符合 “開閉原則”(對擴展開放,對修改封閉),新增產品(寶馬七系)只需新增具體產品類和具體工廠類即可,
2、符合 “單一職責原則”,每個具體工廠類只負責創建對應的產品,
缺點:
1、系統復雜度增加:新增產品(寶馬七系),類的個數成對增加(寶馬七系 + 寶馬七系生產車間),
2、系統抽象性和理解難度增加,
3、具體工廠只能創建一類產品(寶馬類),
四、抽象工廠模式
抽象工廠模式由五類角色組成:抽象產品族、抽象產品、具體產品、抽象工廠、具體工廠,
抽象產品族(汽車):
public abstract class Car {
/**
* 汽車介紹
*/
abstract void introduce();
}
抽象產品(寶馬、奔馳):
public abstract class BWM extends Car {
/**
* 寶馬介紹
*/
@Override
abstract void introduce();
}
public abstract class Benz extends Car {
/**
* 奔馳介紹
*/
@Override
abstract void introduce();
}
具體產品(寶馬三系、寶馬五系、奔馳C級、奔馳E級):
public class BWM320 extends BWM {
@Override
void introduce() {
System.out.println("寶馬三系");
}
}
public class BWM525 extends BWM {
@Override
void introduce() {
System.out.println("寶馬五系");
}
}
public class BenzC extends Benz {
@Override
void introduce() {
System.out.println("奔馳C級");
}
}
public class BenzE extends Benz {
@Override
void introduce() {
System.out.println("奔馳E級");
}
}
抽象工廠(汽車生產車間):
public abstract class Factory {
/**
* 寶馬生產
*
* @return 汽車
*/
abstract Car makeBWM();
/**
* 奔馳生產
*
* @return 汽車
*/
abstract Car makeBenz();
}
具體工廠(寶馬三系+奔馳C級生產車間、寶馬五系+奔馳E級生產車間):
public class BWM320BenzCFactory extends Factory {
@Override
Car makeBWM() {
return new BWM320();
}
@Override
Car makeBenz() {
return new BenzC();
}
}
public class BWM525BenzEFactory extends Factory {
@Override
Car makeBWM() {
return new BWM525();
}
@Override
Car makeBenz() {
return new BenzE();
}
}
呼叫:
public class Customer {
public static void main(String[] args) {
// 生產寶馬三系+奔馳C級
Factory bWM320BenzCFactory = new BWM320BenzCFactory();
Car bwm320 = bWM320BenzCFactory.makeBWM();
Car benzC = bWM320BenzCFactory.makeBenz();
// 生產寶馬五系+奔馳E級
Factory bWM525BenzEFactory = new BWM525BenzEFactory();
Car bwm525 = bWM525BenzEFactory.makeBWM();
Car benzE = bWM525BenzEFactory.makeBenz();
}
}
優點:
1、符合 “開閉原則”(對擴展開放,對修改封閉),
2、符合 “單一職責原則”,
缺點:
1、難以擴展新種類(奧迪),
五、總結
抽象程度:
簡單工廠模式 < 工廠方法模式 < 抽象工廠模式,
角色分類:
1、簡單工廠模式:抽象產品、具體產品、工廠類,
2、工廠方法模式:抽象產品、具體產品、抽象工廠、具體工廠,
3、抽象工廠模式:抽象產品族、抽象產品、具體產品、抽象工廠、具體工廠,
上一篇:《java設計模式 - 單例模式》
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/230978.html
標籤:java
