前言
Android的設(shè)計模式系列文章介紹,歡迎關(guān)注,持續(xù)更新中:
Android的設(shè)計模式-設(shè)計模式的六大原則
一句話總結(jié)23種設(shè)計模式則
創(chuàng)建型模式:
Android的設(shè)計模式-單例模式
Android的設(shè)計模式-建造者模式
Android的設(shè)計模式-工廠方法模式
Android的設(shè)計模式-簡單工廠模式
Android的設(shè)計模式-抽象工廠模式
Android的設(shè)計模式-原型模式
行為型模式:
Android的設(shè)計模式-策略模式
Android的設(shè)計模式-狀態(tài)模式
Android的設(shè)計模式-責(zé)任鏈模式
Android的設(shè)計模式-觀察者模式
Android的設(shè)計模式-模板方法模式
Android的設(shè)計模式-迭代器模式
Android的設(shè)計模式-備忘錄模式
Android的設(shè)計模式-訪問者模式
Android的設(shè)計模式-中介者模式
Android的設(shè)計模式-解釋器模式
Android的設(shè)計模式-命令模式
結(jié)構(gòu)型模式:
Android的設(shè)計模式-代理模式
Android的設(shè)計模式-組合模式
Android的設(shè)計模式-適配器模式
Android的設(shè)計模式-裝飾者模式
Android的設(shè)計模式-享元模式
Android的設(shè)計模式-外觀模式
Android的設(shè)計模式-橋接模式
1.定義
為創(chuàng)建一組相關(guān)或者相互依賴的對象提供一個接口,而無需指定它們的具體類。
2.介紹
- 抽象工廠模式屬于創(chuàng)建型模式。
- 工廠方法模式每個工廠只能創(chuàng)建一種類型的產(chǎn)品,而抽象工廠模式則能夠創(chuàng)建多種類型的產(chǎn)品。
- 例如:硬盤工廠只生產(chǎn)硬盤這種產(chǎn)品,而電腦工廠則組合不同的硬盤、內(nèi)存、CPU等生產(chǎn)出電腦來。
3.UML類圖
3.1 角色說明:
- AbstractProduct(抽象產(chǎn)品類):定義產(chǎn)品的公共接口。
- ConcreteProduct(具體產(chǎn)品類):定義產(chǎn)品的具體對象,實現(xiàn)抽象產(chǎn)品類中的接口。
- AbstractFactory(抽象工廠類):定義工廠中用來創(chuàng)建不同產(chǎn)品的方法。
- ConcreteFactory(具體工廠類):實現(xiàn)抽象工廠中定義的創(chuàng)建產(chǎn)品的方。
4.實現(xiàn)
4.1 創(chuàng)建抽象產(chǎn)品類
定義公共接口:
//抽象產(chǎn)品類-- CPU
public abstract class CPU {
public abstract void showCPU();
}
//抽象產(chǎn)品類-- 內(nèi)存
public abstract class Memory {
public abstract void showMemory();
}
//抽象產(chǎn)品類-- 硬盤
public abstract class HD {
public abstract void showHD();
}
4.2 創(chuàng)建具體產(chǎn)品類
繼承Product類:
//具體產(chǎn)品類-- Intet CPU
public class IntelCPU extends CPU {
@Override
public void showCPU() {
System.out.println("Intet CPU");
}
}
//具體產(chǎn)品類-- AMD CPU
public class AmdCPU extends CPU {
@Override
public void showCPU() {
System.out.println("AMD CPU");
}
}
//具體產(chǎn)品類-- 三星 內(nèi)存
public class SamsungMemory extends Memory {
@Override
public void showMemory() {
System.out.println("三星 內(nèi)存");
}
}
//具體產(chǎn)品類-- 金士頓 內(nèi)存
public class KingstonMemory extends Memory {
@Override
public void showMemory() {
System.out.println("金士頓 內(nèi)存");
}
}
//具體產(chǎn)品類-- 希捷 硬盤
public class SeagateHD extends HD {
@Override
public void showHD() {
System.out.println("希捷 硬盤");
}
}
//具體產(chǎn)品類-- 西部數(shù)據(jù) 硬盤
public class WdHD extends HD {
@Override
public void showHD() {
System.out.println("西部數(shù)據(jù) 硬盤");
}
}
4.3 創(chuàng)建抽象工廠類
定義工廠中用來創(chuàng)建不同產(chǎn)品的方法:
//抽象工廠類,電腦工廠類
public abstract class ComputerFactory {
public abstract CPU createCPU();
public abstract Memory createMemory();
public abstract HD createHD();
}
4.4 創(chuàng)建具體工廠類
繼承Factory類:
//具體工廠類--聯(lián)想電腦
public class LenovoComputerFactory extends ComputerFactory {
@Override
public CPU createCPU() {
return new IntelCPU();
}
@Override
public Memory createMemory() {
return new SamsungMemory();
}
@Override
public HD createHD() {
return new SeagateHD();
}
}
//具體工廠類--華碩電腦
public class AsusComputerFactory extends ComputerFactory {
@Override
public CPU createCPU() {
return new AmdCPU();
}
@Override
public Memory createMemory() {
return new KingstonMemory();
}
@Override
public HD createHD() {
return new WdHD();
}
}
//具體工廠類--惠普電腦
public class HpComputerFactory extends ComputerFactory {
@Override
public CPU createCPU() {
return new IntelCPU();
}
@Override
public Memory createMemory() {
return new KingstonMemory();
}
@Override
public HD createHD() {
return new WdHD();
}
}
4.5 測試方法
public void test() {
System.out.println("--------------------生產(chǎn)聯(lián)想電腦-----------------------");
ComputerFactory lenovoComputerFactory = new LenovoComputerFactory();
lenovoComputerFactory.createCPU().showCPU();
lenovoComputerFactory.createMemory().showMemory();
lenovoComputerFactory.createHD().showHD();
System.out.println("--------------------生產(chǎn)華碩電腦-----------------------");
ComputerFactory asusComputerFactory = new AsusComputerFactory();
asusComputerFactory.createCPU().showCPU();
asusComputerFactory.createMemory().showMemory();
asusComputerFactory.createHD().showHD();
System.out.println("--------------------生產(chǎn)惠普電腦-----------------------");
ComputerFactory hpComputerFactory = new HpComputerFactory();
hpComputerFactory.createCPU().showCPU();
hpComputerFactory.createMemory().showMemory();
hpComputerFactory.createHD().showHD();
}
輸出結(jié)果為:
--------------------生產(chǎn)聯(lián)想電腦-----------------------
Intet CPU
三星 內(nèi)存
希捷 硬盤
--------------------生產(chǎn)華碩電腦-----------------------
AMD CPU
金士頓 內(nèi)存
西部數(shù)據(jù) 硬盤
--------------------生產(chǎn)惠普電腦-----------------------
Intet CPU
金士頓 內(nèi)存
西部數(shù)據(jù) 硬盤
5.應(yīng)用場景
- 生產(chǎn)多個產(chǎn)品組合的對象時。
6.優(yōu)點
- 代碼解耦,創(chuàng)建實例的工作與使用實例的工作分開,使用者不必關(guān)心類對象如何創(chuàng)建。
7.缺點
- 如果增加新的產(chǎn)品,則修改抽象工廠和所有的具體工廠,違反了開放封閉原則
8.工廠方法模式與抽象工廠模式比較
- 在工廠方法模式中具體工廠負責(zé)生產(chǎn)具體的產(chǎn)品,每一個具體工廠對應(yīng)一種具體產(chǎn)品,工廠方法具有唯一性。
- 抽象工廠模式則可以提供多個產(chǎn)品對象,而不是單一的產(chǎn)品對象。
相關(guān)文章閱讀
Android的設(shè)計模式-設(shè)計模式的六大原則
一句話總結(jié)23種設(shè)計模式則
創(chuàng)建型模式:
Android的設(shè)計模式-單例模式
Android的設(shè)計模式-建造者模式
Android的設(shè)計模式-工廠方法模式
Android的設(shè)計模式-簡單工廠模式
Android的設(shè)計模式-抽象工廠模式
Android的設(shè)計模式-原型模式
行為型模式:
Android的設(shè)計模式-策略模式
Android的設(shè)計模式-狀態(tài)模式
Android的設(shè)計模式-責(zé)任鏈模式
Android的設(shè)計模式-觀察者模式
Android的設(shè)計模式-模板方法模式
Android的設(shè)計模式-迭代器模式
Android的設(shè)計模式-備忘錄模式
Android的設(shè)計模式-訪問者模式
Android的設(shè)計模式-中介者模式
Android的設(shè)計模式-解釋器模式
Android的設(shè)計模式-命令模式
結(jié)構(gòu)型模式:
Android的設(shè)計模式-代理模式
Android的設(shè)計模式-組合模式
Android的設(shè)計模式-適配器模式
Android的設(shè)計模式-裝飾者模式
Android的設(shè)計模式-享元模式
Android的設(shè)計模式-外觀模式
Android的設(shè)計模式-橋接模式