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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 抽象工厂 类图_spring学习中常用到的工厂,抽象工厂学习 | 学步园

發布時間:2025/3/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 抽象工厂 类图_spring学习中常用到的工厂,抽象工厂学习 | 学步园 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

工廠模式有簡單工廠模式,工廠方法模式和抽象工廠模式幾種形態。其中簡單工廠模式和工廠方法模式已經在前面作過介紹。在這里,我們來介紹抽象工廠模式。

抽象工廠模式是所有形態的工廠模式中最為抽象和最具廣泛性的一種形態。

抽象工廠模式的定義

抽象工廠模式是工廠方法模式的進一步擴廣化和抽象化。我們給出抽象工廠模式的類圖定義如下。

圖1. 抽象工廠模式的類圖定義

從上圖可以看出,簡單工廠模式涉及到以下的角色

抽象工廠(AbstractFactory)類或接口

擔任這個角色的是工廠方法模式的核心,它是與應用程序無關的。任何在模式中創立對象的工廠類必須實現這個接口,或繼承這個類。

實工廠類 (Conrete Factory)

擔任這個角色的是與應用程序緊密相關的,直接在應用程序調用下,創立產品實例的那樣一些類。

抽象產品 (Abstract Product)

擔任這個角色的類是工廠方法模式所創立的對象的父類,或它們共同擁有的接口。

實產品 (Concrete Product)

擔任這個角色的類是工廠方法模式所創立的任何對象所屬的類。

怎么這個類圖和工廠方法模式的類圖看起來是一樣的?

是的,圖是一樣的,但是含義有很大的不同。必須指出,在抽象工廠模式中,抽象產品 (AbstractProduct) 可能是一個或多個,從而構成一個或多個產品族(Product Family)。 在只有一個產品族的情況下,抽象工廠模式實際上退化到工廠方法模式。在上面的類圖中,只給出了一個產品族,相當于位圖中的一個點,而完整的位圖應當是三維的,如下圖。

圖2. 抽象工廠模式的位圖

從位圖可以清楚地看到,與紙面垂直的數軸,即第三維軸,是代表產品族的數軸。上面的位圖中展示的是有兩個產品族,族A和族B的情形。

在只有一個產品族時,第三維就坍縮掉,位圖也就只剩下兩維。這時抽象工廠模式就退化得與工廠方法模式一模一樣。

在什么情形下應當使用抽象工廠模式

在以下情況下,應當考慮使用抽象工廠模式。

首先,一個系統應當不依賴于產品類實例被創立,組成,和表示的細節。這對于所有形態的工廠模式都是重要的。

其次,這個系統的產品有多于一個的產品族。

第三,同屬于同一個產品族的產品是設計成在一起使用的。這一約束必須得在系統的設計中體現出來。

最后,不同的產品以一系列的接口的面貌出現,從而使系統不依賴于接口實現的細節。

其中第二丶第三個條件是我們選用抽象工廠模式而非其它形態的工廠模式的關鍵性條件。

抽象工廠模式在小花果園系統中的實現

現在,我們在佛羅里達的渡假小屋修整好啦。接下來,一項重要而光榮的工作,就是開發小屋后面的小花園。這意味著,我們有兩處小花園需要照料,一處在北方地區,另一處在亞熱帶地區。抽象工廠模式正好適用于我們的情況。

圖3. 抽象工廠模式應用于小花果園系統中。三種不同的背景顏色可以區分工廠類,蔬菜類(第一產品族),和水果類的類圖(第二產品族)

兩處花園就相當于兩個產品族。顯然,給北方花園的植物是要種植在一起的,給南方花園的植物是要另種植在一起的。這種分別應當體現在系統的設計上面。這就滿足了應當使用抽象工廠模式的第二和第三個條件。

相關代碼如下:

創建JAVA工程

新建三個包:

分別為:factory.impl? 存放接口

factory.action? 存放類

factory.test??? 測試類

源代碼如下:可運行:

1. FruitIF 接口

package factory.impl;

/**

* 類說明???? 水果接口

* @author?? zhaoguoli

* @version? v1.0? 創建時間:2009-4-10 下午02:09:11

*/

public interface FruitIF {

public String getName();

}

2.Gardener 接口

package factory.impl;

/**

* 類說明????? 園藝愛好者接口類

* @author?? zhaoguoli

* @version? v1.0? 創建時間:2009-4-10 下午01:57:59

*/

public interface Gardener {

// 返回蔬菜類接口

public VeggieIF createVeggie(String name);

// 返回水果類接口

public FruitIF createFruit(String name) ;

}

3.FruitIF? 接口

package factory.impl;

/**

* 類說明???? 水果接口

* @author?? zhaoguoli

* @version? v1.0? 創建時間:2009-4-10 下午02:09:11

*/

public interface FruitIF {

public String getName();

}

package factory.action;

import factory.impl.FruitIF;

/**

* 類說明???? 南方水果實現類

* @author?? zhaoguoli

* @version? v1.0? 創建時間:2009-4-10 下午02:14:09

*/

public class NorthernFruit implements FruitIF {

public String name;

public NorthernFruit(String name){

this.name = name;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

package factory.action;

import factory.impl.FruitIF;

import factory.impl.Gardener;

import factory.impl.VeggieIF;

/**

* 類說明 南方園藝受好者

*

* @author zhaoguoli

* @version v1.0 創建時間:2009-4-10 下午01:59:25

*/

public class NorthernGardener implements Gardener {

// 返回蔬菜類接口

public VeggieIF createVeggie(String name) {

return new NorthernVeggie(name);

}

// 返回水果類接口

public FruitIF createFruit(String name) {

return new NorthernFruit(name);

}

}

package factory.action;

import factory.impl.VeggieIF;

/**

* 類說明???? 南方菜實現類

* @author?? zhaoguoli

* @version? v1.0? 創建時間:2009-4-10 下午02:11:58

*/

public class NorthernVeggie implements VeggieIF {

private String name;

public NorthernVeggie(String name) {

this.name = name;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

package factory.action;

import factory.impl.FruitIF;

/**

* 類說明???? 北方水果實現類

* @author?? zhaoguoli

* @version? v1.0? 創建時間:2009-4-10 下午02:20:57

*/

public class SouthernFruit implements FruitIF {

public String name;

public SouthernFruit(String name){

this.name = name;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

package factory.action;

import factory.impl.FruitIF;

import factory.impl.Gardener;

import factory.impl.VeggieIF;

/**

* 類說明

* @author?? zhaoguoli

* @version? v1.0? 創建時間:2009-4-10 下午02:23:52

*/

public class SouthernGardener implements Gardener {

// 返回蔬菜類接口

public VeggieIF createVeggie(String name) {

return new SouthernVeggie(name);

}

// 返回水果類接口

public FruitIF createFruit(String name) {

return new SouthernFruit(name);

}

}

package factory.action;

import factory.impl.VeggieIF;

/**

* 類說明???? 北方菜實現類

* @author?? zhaoguoli

* @version? v1.0? 創建時間:2009-4-10 下午02:22:02

*/

public class SouthernVeggie implements VeggieIF {

public String name;

public SouthernVeggie(String name){

this.name = name;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

package factory.test;

import factory.action.NorthernGardener;

import factory.action.SouthernGardener;

import factory.impl.Gardener;

/**

* 類說明???? 測試抽象工廠模式

* @author?? zhaoguoli

* @version? v1.0? 創建時間:2009-4-10 下午02:26:18

*/

public class FactoryTest {

/**

* 方法說明:

* @param args

*/

public static void main(String[] args) {

// TODO 自動生成方法存根

// 南方園藝者生產花和菜

String name = null;

// 南方園藝者生產花和菜

NorthernGardener northernGardener = new NorthernGardener();

Gardener gardener = (Gardener)northernGardener;

name = "香蕉";

System.out.println(northernGardener.createFruit(name).getName());

name = "南菜";

System.out.println(northernGardener.createVeggie(name).getName());

// 北方園藝者生產花和菜

SouthernGardener southernGardener = new SouthernGardener();

name = "蘋果";

System.out.println(southernGardener.createFruit(name).getName());

name = "北菜";

System.out.println(southernGardener.createVeggie(name).getName());

}

}

運行結果如下:

香蕉

南菜

蘋果

北菜

spring使用時,會將園藝者接口中也定義方法,一切盡量用接口。

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的java 抽象工厂 类图_spring学习中常用到的工厂,抽象工厂学习 | 学步园的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 致命弯道8在线观看免费高清完整 | 日本视频www | 久久精品国产免费看久久精品 | 三级福利 | 懂色av一区二区三区在线播放 | 欧美激情一区二区三级高清视频 | 新天堂av| 日韩a视频 | 星空大象在线观看免费播放 | 日本欧美一区 | 极品少妇av| 夏目彩春娇喘呻吟高潮迭起 | 亚洲男人的天堂在线 | 欧美日韩啪啪 | 日本美女久久久 | 国产精品视频a | 伦理片一区二区三区 | 少妇免费毛片久久久久久久久 | 亚洲一区| free性欧美69巨大 | 国产传媒第一页 | 好男人在线视频www 亚洲福利国产 | 久久久久亚洲精品系列色欲 | 欧美黄大片 | 欧美日韩在线一区 | 黄在线观看 | 黄色片久久| 黄色免费在线视频 | 国产高清视频在线播放 | 欧美日韩99 | 成人免费一区二区 | 91黄色影视 | 欧美天天爽 | 久久五月网| 国模私拍在线观看 | 国产色在线观看 | 涩久久| 岛国av在线免费 | 黑人添美女bbb添高潮了 | 亚洲欧美一区二区视频 | 色哟哟一区二区三区四区 | 国产a视频精品免费观看 | 国产成人综合网 | 精品黑人一区二区三区在线观看 | 500福利视频导航 | 午夜国产一区二区三区 | 美女网站免费观看 | 日日噜噜夜夜狠狠久久丁香五月 | 色老妹| 91蜜桃臀久久一区二区 | 成人福利视频在线 | 制服丝袜第一页在线观看 | 看全色黄大色黄大片大学生 | 欧美精品久久久久性色 | 91亚洲精品乱码久久久久久蜜桃 | 国产乱子伦精品无码专区 | 一区二区三区免费网站 | 久久靠逼视频 | 国产福利一区在线观看 | 日韩福利一区二区 | 美女露胸无遮挡 | 国产日日夜夜 | 亚洲乱码在线观看 | 亚洲av永久无码精品三区在线 | 波多野42部无码喷潮 | 在线观看国产一区二区三区 | 国产精品丝袜黑色高跟鞋 | 日韩一区二区三区视频 | 成人久久免费视频 | av啊啊 | 亚洲日本va中文字幕 | 日本少妇作爱视频 | 少妇按摩一区二区三区 | 狠狠操狠狠插 | 老妇荒淫牲艳史 | 免费成人黄| 久热在线视频 | 无码成人精品区一级毛片 | 久久中文字幕精品 | 激情六月丁香 | 91狠狠爱 | 亚洲第一二区 | 农村搞破鞋视频大全 | 中文在线观看视频 | 中文字幕一区二区三三 | 美女被揉胸视频 | 国产精品亚洲无码 | 12av毛片| 一区二区三区欧美精品 | 国产精品国产a级 | 日韩一区二区免费看 | 亚洲自拍偷拍网 | 亚洲欧美另类在线视频 | 91久久精品日日躁夜夜躁国产 | 欧美大片网站 | 亚洲美女在线播放 | 欧美大喷水吹潮合集在线观看 | 我的丝袜美腿尤物麻麻 | 亚洲成年网 |