抽象工廠模式


@

一、概述

抽象工廠模式也是屬於設計模式中的創建型模式,用於產品族的構建,抽象工廠模式是所有形態的工廠模式中最為具有一般性的一種形態。抽象工廠是指當有多個角色時使用的一種工廠模式。抽象工廠模式可以向客戶端提供一個接口,是客戶端在不必指定產品的具體情況下,創建多個產品族的產品對象。

二、模式結構圖

在這里插入圖片描述

三、Java代碼實現

還是以水果舉例首先我們要分別創建水果接口和水果工廠接口

package 抽象工廠模式;

public interface Fruit {
//	生產水果-接口
	public void get();
}
package 抽象工廠模式;

public interface FruitFactory {
	public Fruit getApple();
	public Fruit getBanana();
}

創建具體水果的抽象類,讓具體水果抽象類實現水果接口

package 抽象工廠模式;

public abstract class Apple implements Fruit{
//	蘋果抽象類
	public abstract void get();
}
package 抽象工廠模式;

public abstract class Banana implements Fruit{
//	香蕉抽象類
	public abstract void get();
}

創建具體的水果類,每個水果都分為A、B兩個等級。

package 抽象工廠模式;
//Apple_A 繼承Apple
public class Apple_A extends Apple{
	@Override
	public void get() {
		System.out.println("生產A級-蘋果");
	}
}
package 抽象工廠模式;
// Apple_B繼承Apple類
public class Apple_B extends Apple{
	@Override
	public void get() {
		System.out.println("生產B級-蘋果");
	}
}

分別創建生產A級水果和B級水果的A類工廠和B類工廠,並實現工廠接口

package 抽象工廠模式;
//	FruitFactory_calssA 要去實現 FruitFactory
public class FruitFactory_calssA implements FruitFactory{
//  A級水果工廠只生產A級水果
	@Override
	public Fruit getApple() {
//		生產A級蘋果
		return new Apple_A();
	}

	@Override
	public Fruit getBanana() {
//		生產A級香蕉
		return new Banana_A();
	}

}
public class FruitFactory_calssB implements FruitFactory{
//   B級水果工廠只生產B級水果
	@Override
	public Fruit getApple() {
//		生產B級蘋果
		return new Apple_B();
	}

	@Override
	public Fruit getBanana() {
//		生產B級香蕉
		return new Banana_B();
	}

}

調用演示*

package 抽象工廠模式;

public class test {
public static void main(String[] args) {

	FruitFactory f1 = new FruitFactory_calssA();
	FruitFactory f2 = new FruitFactory_calssB();
//	Apple
	Fruit apple_A = f1.getApple();
	apple_A.get();
	Fruit apple_B= f2.getApple();
	apple_B.get();
// 	Banana
	Fruit banana_A = f1.getBanana();
	banana_A.get();
	Fruit banana_B = f2.getBanana();
	banana_B.get();
}
}

在這里插入圖片描述

四、工廠方法模式和抽象工廠模式比較

工廠方法模式中的每一個形態都是針對一定的問題的解決方案,針對的是多個產品系列結構;而抽象工廠模式針對的是多個產品族結構,一個產品內有多個產品系列。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM