Java設計模式之三(抽象工廠模式)
一、什麼是抽象工廠模式
抽象工廠模式是所有形態的工廠模式中最為抽象和最其一般性的。抽象工廠模式可以向客戶端提供一個介面,使得客戶端在不必指定產品的具體型別的情況下,能夠建立多個產品族的產品物件。
二、產品族和產品等級結構
三、模式中包含的角色及其職責
1.抽象工廠(Creator)角色 抽象工廠模式的核心,包含對多個產品結構的宣告,任何工廠類都必須實現這個介面。
2.具體工廠( Concrete Creator)角色 具體工廠類是抽象工廠的一個實現,負責例項化某個產品族中的產品物件。
3.抽象(Product)角色 抽象模式所建立的所有物件的父類,它負責描述所有例項所共有的公共介面。
4.具體產品(Concrete Product)角色 抽象模式所建立的具體例項物件
總結:抽象工廠中方法對應產品結構,具體工廠對應產品族。
程式碼實現:
抽象Fruit(水果)類:
package com.qianyan.product;
public interface Fruit {
/**
* 採集
*/
public void get();
}
抽象產品結構類(蘋果、香蕉):
package com.qianyan.bean; import com.qianyan.product.Fruit; public abstract class Apple implements Fruit{ /** * 採集 */ public abstract void get(); }
package com.qianyan.bean;
import com.qianyan.product.Fruit;
public abstract class Banana implements Fruit{
/**
* 採集
*/
public abstract void get();
}
抽象產品類的實現:產品族(北方蘋果、香蕉;南方蘋果、香蕉):
package com.qianyan.bean.impl; import com.qianyan.bean.Apple; public class NorthApple extends Apple{ @Override public void get() { System.out.println("生產北方蘋果!"); } }
package com.qianyan.bean.impl;
import com.qianyan.bean.Banana;
public class NorthBanana extends Banana{
@Override
public void get() {
System.out.println("生產北方香蕉!");
}
}
package com.qianyan.bean.impl;
import com.qianyan.bean.Apple;
public class SourthApple extends Apple{
@Override
public void get() {
System.out.println("生產南方蘋果!");
}
}
package com.qianyan.bean.impl;
import com.qianyan.bean.Banana;
public class SourthBanana extends Banana{
@Override
public void get() {
System.out.println("生產南方香蕉!");
}
}
抽象工廠類(對應產品結構類):
package com.qianyan.factory;
import com.qianyan.product.Fruit;
/**
* 抽象工廠類
* @author hadoop
*
*/
public interface FruitFactory {
//獲取蘋果
public Fruit getApple();
//獲取香蕉
public Fruit getBanana();
}
抽象工廠的實現類(對應產品族):
package com.qianyan.factory.impl;
import com.qianyan.bean.impl.NorthApple;
import com.qianyan.bean.impl.NorthBanana;
import com.qianyan.factory.FruitFactory;
import com.qianyan.product.Fruit;
public class NorthFactory implements FruitFactory{
@Override
public Fruit getApple() {
return new NorthApple();
}
@Override
public Fruit getBanana() {
return new NorthBanana();
}
}
package com.qianyan.factory.impl;
import com.qianyan.bean.impl.SourthApple;
import com.qianyan.bean.impl.SourthBanana;
import com.qianyan.factory.FruitFactory;
import com.qianyan.product.Fruit;
public class SourthFactory implements FruitFactory{
@Override
public Fruit getApple() {
return new SourthApple();
}
@Override
public Fruit getBanana() {
return new SourthBanana();
}
}
顧客類:
package com.qianyan.user;
import com.qianyan.factory.impl.NorthFactory;
import com.qianyan.factory.impl.SourthFactory;
import com.qianyan.product.Fruit;
public class Customer {
public static void main(String[] args) throws Exception {
//獲得北方生產鏈
NorthFactory f1 = new NorthFactory();
//通過NorthFactory來獲取北方Apple例項物件
Fruit northApple = f1.getApple();
northApple.get();
//通過NorthFactory來獲取北方Banana例項物件
Fruit northBanana = f1.getBanana();
northBanana.get();
//獲得南方生產鏈
SourthFactory f2 = new SourthFactory();
//通過SourthFactory來獲取南方Apple例項物件
Fruit sourthApple = f2.getApple();
sourthApple.get();
//通過SourthFactory來獲取南方Banana實力物件
Fruit sourthBanana = f2.getBanana();
sourthBanana.get();
}
}
相關推薦
Java設計模式之三(抽象工廠模式)
一、什麼是抽象工廠模式 抽象工廠模式是所有形態的工廠模式中最為抽象和最其一般性的。抽象工廠模式可以向客戶端提供一個介面,使得客戶端在不必指定產品的具體型別的情況下,能夠建立多個產品族的產品物件。 二、產品族和產品等級結構 三、模式中包含的角色及其職責 1.抽象工廠(C
C++重寫《大話設計模式》中模式例項三(抽象工廠模式)
(宣告:如果想看例項詳細解析,請看《大話設計模式》,這裡文章只是為了加深學習設計模式印象而自己用C++程式寫一遍,以及把程式碼共享給大家。僅僅是把C#語言換成C++表述,不對書中的程式和例子是否合適做個
設計模式之三:抽象工廠模式
抽象工廠模式(Abstract Factory Pattern): 定義:Provide an interface for creating families of related or dependent objects without specify
設計模式系列之三:抽象工廠模式
前言 在設計模式有三個模式是與工廠模式相關的,分別是:簡單工廠模式、工廠方法模式以及抽象工廠模式。在前面的文章中已經談到前面兩種,這裡就對抽象工廠模式介紹一下。抽象工廠模式就是提供一個建立一系列相關或者相互依賴的介面(也就是抽象類),而無需指定具體的類。簡單來
Android設計模式之模板(抽象類abstract)
知識點補充:介面和抽象類區別 (1)介面是公開的,裡面不能有私有的方法或變數,是用於讓別人使用的; 抽象類是可以有私有方法或私有變數的 (2)實現介面的一定要實現接口裡定義的所有方法; 實現抽象類可以有選擇地重寫需要用到的方法
物件建立型之AbstractFactory(抽象工廠模式)
額外說下,工廠模式和策略模式的區別 可能有些小夥伴也疑惑, 工廠模式使用的場景之一有:當系統的配置由多個產品中的一個來配置的時候,可以適用工廠模式。 而策略模式 的使用場景一般事,先定義一個
設計模式之四:抽象工廠模式
抽象工廠模式(Abstract Factory Pattern)是圍繞一個超級工廠建立其他工廠。該超級工廠又稱為其他工廠的工廠。這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。 在抽象工廠模式中,介面是負責建立一個相關物件的工廠,不需要顯式指定它們的類。每
JAVA 23種設計設計模式---工廠模式(抽象工廠模式)
抽象工廠模式統稱為工廠模式,一搬說工廠模式時都指的是抽象工廠模式。 介紹如下: 案列結構: 程式碼結構: 轎車: package com.zxf.absfactory; //轎車抽象 public interface Sedan { //啟動轎車
設計模式總結之Abstruct Factory Pattern(抽象工廠模式)
目錄 建立型設計模式: 結構型設計模式: 行為型設計模式: Abstruct Factory Pattern(抽象工廠模式) 意圖 提供一個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。 適用性 •一個系統要獨立於它的產品的建立、組合和表示時。 •一
經典設計模式(三):抽象工廠模式
抽象工廠模式 本來不想寫這篇文章的,應該是不想寫工廠模式,因為基本大家都會,不過今天看到一個老鐵的部落格,https://www.yuxuan66.com/16 關於抽象模式的實現,寫得不錯,看了幾遍之後,有了點自己的想法,隨便再熟悉一下工廠模式,於是就有了這篇文章,主要是抽象工廠
設計模式之三:單例模式(餓漢式與懶漢式)
//保證類在記憶體中只有一個物件 package com.xjh.demo.designpattern.pattern3; public class Student { private Student(){ } //懶漢式 priva
headfirst設計模式(5)—工廠模式體系分析及抽象工廠模式
先編一個這麼久不寫的理由 上週我終於鼓起勇氣翻開了headfirst設計模式這本書,看看自己下一個設計模式要寫個啥,然後,我終於知道我為啥這麼久都沒寫設計模式了,headfirst的這個抽象工廠模式,額,我看了好幾次,都不太理解。 在我的印象中,簡單工廠,工廠方法,抽象工廠,這三個東西應該是層層遞進的,然後我
設計模式學習(十四)————抽象工廠模式(使用Qt框架的反射技術——根據字串動態建立類來實現)
抽象工廠模式:提供一個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類! 這個例子也可以用簡單工廠模式+反射+讀取配置檔案來完成,這樣更加簡潔!!! 普通的抽象工廠模式 下面通過一個模擬訪問資料庫的例子來進行說明: #ifndef US
Java設計模式學習筆記(四) 抽象工廠模式
前言 本篇是設計模式學習筆記的其中一篇文章,如對其他模式有興趣,可從該地址查詢設計模式學習筆記彙總地址 1. 抽象工廠模式概述 工廠方法模式通過引入工廠等級結構,解決了簡單工廠模式中工廠類職責太重的問題, 但由於工廠方法模式中的每個工廠只生產一類產品,可能會導致系統中存在大量的工廠類,勢必會增加系統的開銷.
【設計模式與Android】抽象工廠模式——嵌合體克隆工廠
設計模式 android 什麽是抽象工廠模式 所謂抽象工廠模式,就是為創建一組相關或者是互相依賴的對象提供一個接口,而不需要指定它們的具體類的設計模式。抽象工廠模式適用於一個對象族有相同的約束的情況,用不抽象的語言解釋就是國內著名開發者服務商環信在Android和iOS平臺都提供了IM SDK,盡管功
Java設計吉林快三平臺出租出售模式學習記錄-原型模式
單點 兩個 執行 cto trace param otsu execption string 今天要介紹的原型模式也是創建型模式中的一種,感覺叫復制方法模式或許更接地氣一些,我的理解就是用一個對象復制出另一對象。例如孫悟空拔幾根猴毛就能變出好幾個一樣的孫猴子來。其中孫悟空就
js設計模式第三章 簡單工廠模式 讀書筆記
簡單工廠模式又叫靜態工廠方法,由一個工廠物件決定建立某一種產品物件類的例項。主要用來建立同一類的物件。 比如提示彈窗類 function createPop(type,text){ //建立一個物件,並對物件拓展屬性和方法 var o = new Object();
設計模式之禪(里氏替換原則)2018-10-19
介面與抽象類的區別: 介面卡模式:使用不同介面的類所提供的服務為客戶端提供它所期望的介面。 實現: 有一個 MediaPlayer 介面和一個實現了 MediaPlayer 介面的實體類 AudioPlayer。預設情況下,AudioPl
java畫圖總結之三(常用方法paint,repaint,update)
三,常用方法paint,repaint,update 這個問題的由來是因為,我在編寫java小程式,畫圖的時候,發現我重寫了paint(graphics g)方法,而執行的時候呼叫的是repaint()無參方法。老師說,repaint裡面間接呼叫了paint方法。但是是如何間接呼叫的呢?r
js設計模式第五章 抽象工廠模式 讀書筆記
抽象工廠模式(Abstract Factory) 通過類的抽象使得業務適用於一個產品類簇的建立,而不負責建立某一類產品的例項。 JS中是沒有直接的抽象類的,因此我們需要在類的方法中丟擲錯誤來模擬抽象類,如果繼承的子類中沒有覆寫該方法而呼叫,就會丟擲錯誤。 //汽車抽象類 var Car = fu