java 抽象工廠模式簡單實例

抽象工廠模式:提供一個創建一系列的相關的或者依賴的對象的接口,無需指定它們的具體實現類,具體的時間分別在子類工廠中產生。

類似于工廠模式:隔離了具體類的生產實現,使得替換具體的工廠實現類很容易。包含有以下模塊:

1.抽象產品接口:定義產品的接口,公共的暴露方法。便于實際的產品類實現。

2.具體的產品類:包含實際產品的類的邏輯處理:

3.抽象工廠接口:定義產生系列對象的接口

4.具體的工廠實現:實現抽象的接口工廠,返回具體的產品類的實現。

下面是具體的代碼示例:

1.抽象的產品接口,定義了Car 和 IBreakFast

package factory.simple;/*** 抽象產品角色 交通工具接口* * @author lilin* */
public interface Car {/*** 上班函數*/void gotowork();}

?

package factory.abstractfactory;/*** @author lilin* */
public interface IBreakFast {/*** 吃早餐*/void eat();
}

2.定義具體的產品類的實現:

package factory.simple;/*** 具體產品角色,自行車* * @author lilin* */
public class Bike implements Car {@Overridepublic void gotowork() {System.out.println("騎自行車去上班!");}}

?

package factory.simple;/*** @author lilin* */
public class Bus implements Car {@Overridepublic void gotowork() {System.out.println("坐公交車去上班!");}}

?

/*** */
package factory.abstractfactory;/*** @author lilin* */
public class Milk implements IBreakFast {@Overridepublic void eat() {System.out.println("喝牛奶!");}}

?

/*** */
package factory.abstractfactory;/*** @author lilin* */
public class Orange implements IBreakFast {@Overridepublic void eat() {System.out.println("吃橘子!");}}

3.定義好抽象的工廠接口,一系列的獲取實例的接口方法:

/*** */
package factory.abstractfactory;import factory.simple.Car;/*** @author lilin* */
public interface IAbstractFactory {/*** * @return*/Car getCar();/*** */IBreakFast getBreakFast();}

4.定義具體的工廠生產類,具體的產品實例返回。

/*** */
package factory.abstractfactory;import factory.simple.Bike;
import factory.simple.Car;/*** @author lilin* */
public class LowPersonFactory implements IAbstractFactory {@Overridepublic Car getCar() {return new Bike();}@Overridepublic IBreakFast getBreakFast() {return new Orange();}}

?

/*** */
package factory.abstractfactory;import factory.simple.Bus;
import factory.simple.Car;/*** @author lilin* */
public class HighPersonFactory implements IAbstractFactory {@Overridepublic Car getCar() {return new Bus();}@Overridepublic IBreakFast getBreakFast() {return new Milk();}
}

?

最后,通過testNG簡單測試下,抽象工廠模式的實現:代碼如下:

/*** */
package factory.abstractfactory;import org.testng.annotations.Test;import factory.simple.Car;/*** @author lilin* */
public class AbstractFactoryTest {@Testpublic void test() {IAbstractFactory factory = new LowPersonFactory();Car car = factory.getCar();IBreakFast breakFast = factory.getBreakFast();System.out.println("吃的早飯是:");breakFast.eat();System.out.println("上班交通工具是:");car.gotowork();IAbstractFactory factory2 = new HighPersonFactory();car = factory2.getCar();breakFast = factory2.getBreakFast();System.out.println("吃的早飯是:");breakFast.eat();System.out.println("上班交通工具是:");car.gotowork();}}

這樣使用過程城中,只要注入抽象的工廠接口,具體的產品的產生,會在實際的子類工廠類中產生,也可以隨意的添加和修改實際子類工廠類,而不需要改變既有的代碼設計。

抽象工廠方法:一般常常使用于一套程序,需要多套實現的場景之下。

?

轉載于:https://www.cnblogs.com/lilin0719/p/5313886.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458149.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458149.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458149.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

圖像處理之積分圖應用三(基于NCC快速相似度匹配算法)

from:https://blog.csdn.net/jia20003/article/details/53021614 圖像處理之積分圖應用三(基于NCC快速相似度匹配算法) 基于Normalized cross correlation(NCC)用來比較兩幅圖像的相似程度已經是一個常見的圖像處理手段。在工業生產環節檢測…

深入淺出地理解機器人手眼標定

from:https://blog.csdn.net/qq_16481211/article/details/79764730 所謂手眼系統,就是人眼鏡看到一個東西的時候要讓手去抓取,就需要大腦知道眼鏡和手的坐標關系。如果把大腦比作B,把眼睛比作A,把手比作C,如果A和B的…

centos 6.5 安裝 mongodb

官方給出的鏈接地址:https://docs.mongodb.org/manual/tutorial/install-mongodb-on-red-hat/ 安裝后重要的日志 win10 上使用mongochef連接不上數據庫 解決方案: 修改 /etc/mongod.conf 將bindIP 改為0.0.0.0 監聽外網轉載于:https://www.cnblogs.com/l…

scala學習資料

1. scala-sbt 構建工具: http://www.scala-sbt.org/0.13/docs/zh-cn/Directories.html 2. 資料: http://www.ibm.com/developerworks/cn/java/j-lo-funinscala2/ https://www.zhihu.com/question/34548588?sortcreated http://nerd-is.in/2013-09/scala…

opencv3/C++ 機器學習-SVM應用實例:藥品(膠囊)識別與分類

from:https://blog.csdn.net/akadiao/article/details/79278072 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/akadiao/article/details/79278072 問題描述: 現對6種不同顏色藥品(膠囊…

Elasticsearch 搜索不到數據問題(_mapping 設置)

需求 由于 kibana3 中,不支持直接在請求的 url 中設置搜索的 type (是不是我不知道???)。 為了支持特定 type 的搜索,所以我設置了個下每個 panel 的查詢語句,讓它增加一個&#xff…

SVM之交叉驗證【轉】

交叉驗證(CrossValidation)方法思想簡介 以下簡稱交叉驗證(Cross Validation)為CV.CV是用來驗證分類器的性能一種統計分析方法,基本思想是把在某種意義下將原始數據(dataset)進行分組,一部分做為訓練集(train set),另一部分做為驗證集(validation set),首先用訓練集對分類器進…

linux命令學習-1-less

less 工具也是對文件或其它輸出進行分頁顯示的工具,應該說是linux正統查看文件內容的工具,功能極其強大。less 的用法比起 more 更加的有彈性。在 more 的時候,我們并沒有辦法向前面翻, 只能往后面看,但若使用了 less …

python問題匯總

問題1:如何解決python3中numpy報錯No module named numpy 打開terminal pip3 install numpy 問題2:ModuleNotFoundError No module named matplotlib 打開terminal pip3 install matplotlib

jspspy database help

.轉載于:https://www.cnblogs.com/outline/p/5316051.html

SVM 調參策略

轉自:SVM 調參策略:https://blog.csdn.net/u014484783/article/details/78220646 SVM 怎樣能得到好的結果 1. 對數據做歸一化(simple scaling) 2. 應用 RBF kernel 3. 用cross-validation和grid-search 得到最優的c和g 4. 用…

美好的?天 從ActionTab開始 美觀、智能、?效的新標簽? iTab 新標簽頁iTab新標簽頁Atop100工具推薦

文章目錄 ActionTabiTab 新標簽頁iTab新標簽頁,小組件,起始頁,標簽頁,日歷,股票,瀏覽器擴展 https://www.actiontab.cn/ ActionTab 收費???? iTab 新標簽頁iT…

Oracle學習之merge

--使用merge語句 create table new as select * from emp where 10; insert into new (empno,ename) select empno,ename from emp where deptno10;merge into new n using emp e on (n.empnoe.empno) when matched then update set n.sale.salwhen not matched then insert (…

機器學習中的算法(2)-支持向量機(SVM)基礎

from:http://www.cnblogs.com/LeftNotEasy/archive/2011/05/18/2034566.html 版權聲明: 本文由LeftNotEasy發布于http://leftnoteasy.cnblogs.com, 本文可以被全部的轉載或者部分使用,但請注明出處,如果有問題,請聯系wheeleastgm…

HDU 2586 How far away ?【LCA】

題目鏈接: http://acm.hdu.edu.cn/showproblem.php?pid2586 題意: 無向圖,給定邊及邊權重,任意兩點之間都有一條唯一的道路,道路上每個點只能出現一次。給定詢問,求詢問的結點之間的距離。 分析&#xff1…

深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT條件

from:https://blog.csdn.net/xianlingmao/article/details/7919597 在求取有約束條件的優化問題時,拉格朗日乘子法(Lagrange Multiplier) 和KKT條件是非常重要的兩個求取方法,對于等式約束的優化問題,可以應用拉格朗日乘子法去求…

android一些若干回調測試

1.activity:onAttachedToWindow在onResume后回調 2.onCreate和onResume調用間隔為29ms, onAttachedToWindow和OnResume相差11ms, viewTreeObserver:OnGloballayout和onAttachedtoWindow相差19ms 注:以上的測試時間間隔不能保證精確相同,但是可以從中看出…

Kinect深度圖與攝像頭RGB的標定與配準(轉載文章)

作者原文地址:http://blog.csdn.net/aichipmunk/article/details/9264703 自從有了Kinect,根據深度圖提取前景就非常方便了。因此出現了很多虛擬現實、視頻融合等應用。但是,Kinect自身的RGB攝像頭分辨率有限,清晰度也不及一些專業…

臺北到淡水版Firefox無法播放視頻

臺北到淡水版的Firefox所有的視頻都無法播放,禁用了各種插件也還是沒法播放,最后才確定是SWF的問題,大家有同樣問題的,可以下載我的放到SWF文件夾下,目錄結構如下圖: ?Firefox的SWF下載地址1 ?Firefox的S…

最詳細、最完整的相機標定講解

相機標定詳解 最近做項目要用到標定,因為是小白,很多東西都不懂,于是查了一堆的博客,但沒有一個博客能讓我完全能看明白整個過程,絕大多數都講的不全面,因此自己總結了一篇博客,給自己理一下思…