設計模式——工廠模式(java)

工廠:顧名思義,生產,加工產品的地方

工廠模式:就是在軟件中提供專門用來創建對象實例的類(相當於一個加工生產對象的工廠),對所有的new操作進行封裝,當要實例化對象的時候,根據傳入的參數決定要實例化哪一個對象。

工廠模式包括工廠方法模式抽象工廠模式

抽象工廠模式是工廠方法模式的擴展。


工廠方法模式:

我們要創建一個生產不同口味冰淇淋的工廠,首先所有口味的冰淇淋類都會有一個生成冰淇淋的方法,而這個方法就可以抽象爲一個接口(IceCreamInterface),讓不同口味的冰淇淋類實現該接口,最後還需要一個工廠類,根據傳入的參數實例化不同口味的冰淇淋對象。


1. 製作冰淇淋的方法接口

//冰淇淋接口
public interface IceCreamInterface {
    //製作冰淇淋的方法
	public void createIceCream();
}

2. 實現接口的不同口味的冰淇淋類
//製作菠蘿冰淇淋
public class PineappleCream implements IceCreamInterface {
	@Override
	public void createIceCream() {
		System.out.println("生成一個菠蘿冰淇淋");
	}
}

//製作草莓冰淇淋
public class StrawberryCream implements IceCreamInterface {
	@Override
	public void createIceCream() {
		System.out.println("生成一個草莓冰淇淋");
	}
}

3. 冰淇淋工廠類,根據傳入的字符串實例化冰淇淋對象

//生成冰淇淋的工廠
public class IceCreamFactory {
	//根據傳入的name來判斷需要創建哪個對象
	public IceCreamInterface getIceCream(String name){
		if("strawberry".equals(name)){
			return new StrawberryCream();
		}else if("pineapple".equals(name)){
			return new PineappleCream();
		}else{
			return null;
		}
	}
}

4. 調用工廠類實例化對象
IceCreamFactory factory1=new IceCreamFactory();
		//向上轉型
		IceCreamInterface iceCream1=factory1.getIceCream("strawberry");
		if(iceCream1!=null){
			iceCream1.createIceCream();
		}
		
		iceCream1=factory1.getIceCream("pineapple");
		if(iceCream1!=null){
			iceCream1.createIceCream();
		}	


抽象工廠模式

我們要生產兩種類別的冰淇淋,分別是蛋卷冰淇淋和紙杯冰淇淋,同時蛋卷冰淇淋還分手工和機器生產的兩種,紙杯同樣也分手工和機器的兩種,於是我們要生產四種產品類型的冰淇淋(四個生成不同對象的類)。要建立兩個工廠,一個是手工工廠用於生產手工冰淇淋(實例化手工產品的對象),一個是機器工廠用於生產機器冰淇淋(實例化機器產品的對象)。

1. 抽象生產紙杯冰淇淋方法爲CupCream接口

//紙杯冰淇淋接口
public interface CupCream {
	public void createCupCream();
}
2. 實現接口的手工紙杯冰淇淋類和機器紙杯冰淇淋類

//手工紙杯冰淇淋
public class ManualCupCream implements CupCream{
	@Override
	public void createCupCream() {
		System.out.println("生成一個手工紙杯冰淇淋");
	}
}
//機器紙杯冰淇淋
public class MachineCupCream implements CupCream{
	@Override
	public void createCupCream() {
		System.out.println("生成一個機器紙杯冰淇淋");
	}
}
3. 抽象生產蛋卷冰淇淋方法爲EggCream接口
//蛋卷冰淇淋接口
public interface EggCream {
	public void createEggCream();	
}
4. 實現接口的手工蛋卷冰淇淋類和機器蛋卷冰淇淋類
//手工蛋卷冰淇淋
public class ManualEggCream implements EggCream {
	@Override
	public void createEggCream() {
		System.out.println("生成一個手工蛋卷冰淇淋");
	}
}
//機器蛋卷冰淇淋
public class MachineEggCream implements EggCream {
	@Override
	public void createEggCream() {
		// TODO Auto-generated method stub
		System.out.println("生成一個機器蛋卷冰淇淋");
	}
}

5. 定義包裝工廠接口,包括得到蛋卷冰淇淋和紙杯冰淇淋的抽象方法
//包裝工廠接口
public interface WrappingFactroy {
	public EggCream  getEggCream();
	public CupCream getCupCream();
}

6. 實現包裝工廠接口的手工工廠和機器工廠
//手工生產工廠
public class ManualFactory implements WrappingFactroy{
	@Override
	public EggCream getEggCream() {
		return new ManualEggCream();
	}
	@Override
	public CupCream getCupCream() {
		return new ManualCupCream();
	}
}
//機器生產工廠
public class MachineFactory implements WrappingFactroy{
	@Override
	public EggCream getEggCream() {
		return new MachineEggCream();
	}
	@Override
	public CupCream getCupCream() {
		return new MachineCupCream();
	}
}

7. 調用工廠類實例化對象
WrappingFactroy wrapping=new ManualFactory() ;
		EggCream eggCream=wrapping.getEggCream();
		eggCream.createEggCream();
		CupCream cupCream=wrapping.getCupCream();
		cupCream.createCupCream();
		
		wrapping=new MachineFactory();
		eggCream=wrapping.getEggCream();
		eggCream.createEggCream();
		cupCream=wrapping.getCupCream();
		cupCream.createCupCream();







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章