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

歡迎訪問 生活随笔!

生活随笔

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

asp.net

《研磨设计模式》chap6 工厂模式factory(2)案例实现

發布時間:2025/3/21 asp.net 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《研磨设计模式》chap6 工厂模式factory(2)案例实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 用工廠模式實現案例

public interface ExportFileApi {//導出內容成為文件 public boolean export(String data); }public class ExportDB implements ExportFileApi{public boolean export(String data) { } }public class ExportTxt implements ExportFileApi{public boolean export(String data) { } }//實現導出數據的業務功能對象 public abstract class ExportOperate {//導出文件 public boolean export(String data){//使用工廠方法ExportFileApi api = factoryMethod();return api.export(data);}//工廠方法,創建導出的文件對象的接口對象 protected abstract ExportFileApi factoryMethod(); }public class ExportDBOperate extends ExportOperate{protected ExportFileApi factoryMethod() {//創建導出成數據庫備份文件形式的對象return new ExportDB();} }public class ExportTxtFileOperate extends ExportOperate{ protected ExportFileApi factoryMethod() {//創建導出成文本文件格式的對象return new ExportTxtFile();} }public static void main(String[] args) {//創建需要使用的Creator對象ExportOperate operate = new ExportDBOperate();//調用輸出數據的功能方法operate.export("測試數據");}

2. IoC/DI

IoC——InversionofControl, 控制反轉
DI——DependencyInjection, 依賴注入

public class A { private C c = null;//等待被注入進來 //注入資源C的方法 public void setC(C c){this.c = c;}public void t1(){//這里需要使用C類,可是又不讓主動去創建C了,怎么辦?//反正就要求從外部注入,這樣更省心,//自己不用管怎么獲取C,直接使用就好了c.tc();} }

優化為:

public abstract class A1 {//工廠方法,創建C1,類似于從子類注入進來的途徑 protected abstract C1 createC1();public void t1(){//這里需要使用C1類,可是不知道究竟是用哪一個,也就不主動去創建C1了,怎么辦?//反正會在子類里面實現,這樣更省心,這里不用管怎么獲取C1,直接使用就好了createC1().tc();} }public class A2 extends A1 {protected C1 createC1() {//真正的選擇具體實現,并創建對象return new C2();} }

3. 平行的類層次

4. 參數化工廠

依賴倒置原則告訴我們“要依賴抽象, 不要依賴于具體類”, 簡單點說就是: 不能讓高層組件依賴于低層組件, 而且不管高層組件還是低層組件, 都應該依賴于抽象。

eg. ExportOperate 提供type參數,假設要新增加一個xml文件輸出類,增加type ==3.

public interface ExportFileApi {//導出內容成為文件 public boolean export(String data); }public class ExportDB implements ExportFileApi{public boolean export(String data) {//簡單示意一下,這里需要操作數據庫和文件System.out.println("導出數據"+data+"到數據庫備份文件");return true;} }public class ExportTxtFile implements ExportFileApi{public boolean export(String data) {//簡單示意一下,這里需要操作文件System.out.println("導出數據"+data+"到文本文件");return true;} }public class ExportXml implements ExportFileApi{public boolean export(String data) {//簡單示意一下System.out.println("導出數據"+data+"到XML文件");return true;} }public class ExportOperate {//導出文件 public boolean export(int type,String data){//使用工廠方法ExportFileApi api = factoryMethod(type);return api.export(data);}//工廠方法,創建導出的文件對象的接口對象 protected ExportFileApi factoryMethod(int type){ExportFileApi api = null;//根據類型來選擇究竟要創建哪一種導出文件對象if(type==1){api = new ExportTxtFile();}else if(type==2){api = new ExportDB();}return api;} }public class ExportOperate2 extends ExportOperate{//覆蓋父類的工廠方法,創建導出的文件對象的接口對象 protected ExportFileApi factoryMethod(int type){ExportFileApi api = null;//可以全部覆蓋,也可以選擇自己感興趣的覆蓋,//這里只想添加自己新的實現,其他的不管if(type==3){api = new ExportXml();}else{//其他的還是讓父類來實現api = super.factoryMethod(type); }return api; } }public static void main(String[] args) { // //創建需要使用的Creator對象 // ExportOperate operate = new ExportOperate(); // //調用輸出數據的功能方法,傳入選擇到處類型的參數 // operate.export(1,"測試數據");//創建需要使用的Creator對象ExportOperate operate = new ExportOperate2();//下面變換傳入的參數來測試參數化工廠方法operate.export(1,"Test1");operate.export(2,"Test2");operate.export(3,"Test3");}

5. 總結

工廠方法模式的本質:延遲到子類來選擇實現。

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的《研磨设计模式》chap6 工厂模式factory(2)案例实现的全部內容,希望文章能夠幫你解決所遇到的問題。

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