1.2_工廠方法模式
角色組成
1.抽象工廠角色:這是工廠方法模式的核心,它與應用程序無關。是具體工廠角色必須實現的接口或者必須繼承的父類。在java中它由抽象類或者接口來實現。
2.具體工廠角色:它含有和具體業務邏輯有關的代碼。由應用程序調用以創建對應的具體產品的對象。在java中它由具體的類來實現。
3.抽象產品角色:它是具體產品繼承的父類或者是實現的接口。在java中一般有抽象類或者接口來實現。
4.具體產品角色:具體工廠角色所創建的對象就是此角色的實例。在java中由具體的類來實現。
水果:抽象產品
package co.xiaowenzi.study;
public interface Fruit {
// 送給客戶
void send();
}
package co.xiaowenzi.study;
public class Apple implements Fruit {
@Override
public void send() {
System.out.println("蘋果已經種好,送給客戶");
}
}
package co.xiaowenzi.study;
public class Banana implements Fruit {
@Override
public void send() {
System.out.println("香蕉已經種好,送給客戶");
}
}
果農: 抽象工廠
package co.xiaowenzi.study;
public interface Farmer {
public Fruit PlantTree();
}
package co.xiaowenzi.study;
public class AppleFarmer implements Farmer {
@Override
public Fruit PlantTree() {
System.out.println("蘋果果農種植完成");
return new Apple();
}
}
package co.xiaowenzi.study;
public class BananaFarmer implements Farmer{
@Override
public Fruit PlantTree() {
System.out.println("香蕉果農種植完成");
return new Banana();
}
}
製造工廠: 具體工廠和產品
package co.xiaowenzi.study;
public class FruitFactory {
/**
* 水果工廠,等待客戶下單進行生產
* @param which
* @return
* @throws Exception
*/
public static Fruit factory(String which) {
// 利用反射來知道那種水果,找到對應的果農種植
Farmer farmer = null;
Fruit fruit = null;
try {
farmer = (Farmer) Class.forName("co.xiaowenzi.study." + which + "Farmer").newInstance();
if (farmer!=null) {
fruit = farmer.PlantTree();
}
} catch (InstantiationException e) {
//e.printStackTrace();
} catch (IllegalAccessException e) {
//e.printStackTrace();
} catch (ClassNotFoundException e) {
//e.printStackTrace();
}
return fruit;
}
}
客戶
package co.xiaowenzi.study;
public class FruitCustomer {
@SuppressWarnings("static-access")
public static void main(String[] args){
//客戶下單香蕉,通知工廠生產
FruitFactory fruitFactory = new FruitFactory();
Fruit fruit = fruitFactory.factory("Apple");
if(fruit!=null){
fruit.send();
}else{
System.out.println("種不出這種水果");
}
}
}
與簡單工廠模式相比:多了一個果農種植步奏。
例如簡單工廠是:客戶直接從水果工廠拿到水果,而不管水果是從哪裏來的;
工廠方法:多了果農種植步奏,水果工廠得到客戶需求,需要那種水果,然後通知相應的果農去種植,由果農返回水果到水果工廠,再提供給客戶。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.