日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

《研磨设计模式》chap7 抽象工厂 Abstract Factory

發布時間:2025/3/21 asp.net 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《研磨设计模式》chap7 抽象工厂 Abstract Factory 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

場景:配電腦,多種CPU、主板

1. 正常編碼
1.1 cpu

//CPU的接口 public interface CPUApi {//示意方法,CPU具有運算的功能 public void calculate(); }

IntelCPU:

//Intel的CPU實現 public class IntelCPU implements CPUApi{ private int pins = 0;//CPU的針腳數目 //構造方法,傳入CPU的針腳數目 public IntelCPU(int pins){this.pins = pins;} public void calculate() {System.out.println("now in Intel CPU,pins="+pins);} }

AMDCPU:

public class AMDCPU implements CPUApi{private int pins = 0;//CPU的針腳數目//構造方法,傳入CPU的針腳數目 public AMDCPU(int pins){this.pins = pins;}public void calculate() {System.out.println("now in AMD CPU,pins="+pins);} }

1.2 主板

//主板的接口 public interface MainboardApi {//示意方法,主板都具有安裝CPU的功能 public void installCPU(); }

技嘉主板

public class GAMainboard implements MainboardApi { private int cpuHoles = 0;// CPU插槽的孔數 public GAMainboard(int cpuHoles){ //構造方法,傳入CPU插槽的孔數this.cpuHoles = cpuHoles;}public void installCPU() {System.out.println("now in GAMainboard,cpuHoles="+cpuHoles);} }

微星主板

public class MSIMainboard implements MainboardApi{ private int cpuHoles = 0; //CPU插槽的孔數 //構造方法,傳入CPU插槽的孔數 public MSIMainboard(int cpuHoles){this.cpuHoles = cpuHoles;}public void installCPU() {System.out.println("now in MSIMainboard,cpuHoles="+cpuHoles);} }

1.3 創建CPU和主板的工廠:

//創建CPU的簡單工廠 public class CPUFactory {//創建CPU接口對象的方法 public static CPUApi createCPUApi(int type){CPUApi cpu = null;//根據參數來選擇并創建相應的CPU對象if(type==1){cpu = new IntelCPU(1156);}else if(type==2){cpu = new AMDCPU(939);}return cpu;} }//創建主板的簡單工廠 public class MainboardFactory {//創建主板接口對象的方法 public static MainboardApi createMainboardApi(int type){MainboardApi mainboard = null;//根據參數來選擇并創建相應的主板對象if(type==1){mainboard = new GAMainboard(1156);}else if(type==2){mainboard = new MSIMainboard(939);}return mainboard;} }

1.4 工程師

public class ComputerEngineer { private CPUApi cpu= null;//定義組裝機器需要的CPU private MainboardApi mainboard = null;//定義組裝機器需要的主板//裝機過程 public void makeComputer(int cpuType,int mainboardType){//1:首先準備好裝機所需要的配件prepareHardwares(cpuType,mainboardType);//2:組裝機器 //3:測試機器 //4:交付客戶}//準備裝機所需要的配件 private void prepareHardwares(int cpuType,int mainboardType){//這里要去準備CPU和主板的具體實現,為了示例簡單,這里只準備這兩個//可是,裝機工程師并不知道如何去創建,怎么辦呢?//直接找相應的工廠獲取this.cpu = CPUFactory.createCPUApi(cpuType);this.mainboard = MainboardFactory.createMainboardApi(mainboardType);//測試一下配件是否好用this.cpu.calculate();this.mainboard.installCPU();} }

client:

public static void main(String[] args) {//創建裝機工程師對象ComputerEngineer engineer = new ComputerEngineer();//告訴裝機工程師自己選擇的配件,讓裝機工程師組裝電腦engineer.makeComputer(1,2);}

2. 運用抽象工廠模式


  • 定義了一個產品族

比如有2種主板、2種cpu,然后按照工廠模式,可以為create(MainBoardType, CPUType ), 但是現在主板和cpu必須配套。因此有主題。

//抽象工廠的接口,聲明創建抽象產品對象的操作 public interface AbstractFactory {//示例方法,創建抽象產品A的對象 public AbstractProductA createProductA();//示例方法,創建抽象產品B的對象 public AbstractProductB createProductB(); } public class Schema1 implements AbstractFactory{public CPUApi createCPUApi() {return new IntelCPU(1156);}public MainboardApi createMainboardApi() {return new GAMainboard(1156);} } //裝機工程師的類 public class ComputerEngineer { private CPUApi cpu= null;//定義組裝機器需要的CPU private MainboardApi mainboard = null;// 定義組裝機器需要的主板public void makeComputer(AbstractFactory schema){//裝機過程//1:首先準備好裝機所需要的配件prepareHardwares(schema);//2:組裝機器//3:測試機器//4:交付客戶}//準備裝機所需要的配件 private void prepareHardwares(AbstractFactory schema){//這里要去準備CPU和主板的具體實現,為了示例簡單,這里只準備這兩個//可是,裝機工程師并不知道如何去創建,怎么辦呢?//使用抽象工廠來獲取相應的接口對象this.cpu = schema.createCPUApi();this.mainboard = schema.createMainboardApi();//測試一下配件是否好用this.cpu.calculate();this.mainboard.installCPU();} }

2. 新增加內存的使用

public class Schema1 implements AbstractFactory{public Object createProduct(int type) {Object retObj = null;//type為1表示創建CPU,type為2表示創建主板if(type==1){retObj = new IntelCPU(1156);}else if(type==2){retObj = new GAMainboard(1156);}return retObj;} }public class Schema3 implements AbstractFactory{public Object createProduct(int type) {Object retObj = null;//type為1表示創建CPU,type為2表示創建主板,type為3表示創建內存if(type==1){retObj = new IntelCPU(1156);}else if(type==2){retObj = new GAMainboard(1156);}//創建新添加的產品else if(type==3){retObj = new HyMemory();}return retObj;} }

調用處:

public class ComputerEngineer {
private CPUApi cpu= null;//定義組裝機器需要的CPU
private MainboardApi mainboard = null; //定義組裝機器需要的主板
private MemoryApi memory = null; //定義組裝機器需要的內存
//裝機過程
public void makeComputer(AbstractFactory schema){
//1:首先準備好裝機所需要的配件
prepareHardwares(schema);
//2:組裝機器

//3:測試機器//4:交付客戶 }//準備裝機所需要的配件 private void prepareHardwares(AbstractFactory schema){//這里要去準備CPU和主板的具體實現,為了示例簡單,這里只準備這兩個//可是,裝機工程師并不知道如何去創建,怎么辦呢?//使用抽象工廠來獲取相應的接口對象this.cpu = (CPUApi)schema.createProduct(1);this.mainboard = (MainboardApi)schema.createProduct(2);this.memory = (MemoryApi)schema.createProduct(3);//測試一下配件是否好用this.cpu.calculate();this.mainboard.installCPU();if(memory!=null){this.memory.cacheData();} }

}

public static void main(String[] args) {
//創建裝機工程師對象
ComputerEngineer engineer = new ComputerEngineer();
//客戶選擇并創建需要使用的裝機方案對象
AbstractFactory schema = new Schema3();
//告訴裝機工程師自己選擇的裝機方案,讓裝機工程師組裝電腦
engineer.makeComputer(schema);
}

3. 總結

比較靈活,但是還是不安全。
優缺點:
優點:切換產品族容易。
缺點:容易造成類層次復雜。比如技嘉主板又分好幾種,難度又要增加幾個類。

總結

以上是生活随笔為你收集整理的《研磨设计模式》chap7 抽象工厂 Abstract Factory的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。