1. 程式人生 > >Java設計模式之三(抽象工廠模式)

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