實現工廠方法模式的技術要點如下:
· 工廠方法模式去掉了簡單工廠模式中工廠方法的靜態屬性,使得它可以被子類繼承。這樣在簡單工廠模式裏集中在工廠方法上的壓力可以由工廠方法模式裏不同的工廠子類來分擔。
· 工廠方法模式由抽象工廠角色、具體工廠角色、抽象產品角色和具體產品角色組成。
· 抽象工廠角色是工廠方法模式的核心,它與應用程序無關,是具體工廠角色必須實現的接口或者必須繼承的父類,它由抽象類或者接口來實現。
· 具體工廠角色含有與具體業務邏輯有關的代碼。由應用程序調用以創建對應的具體產品的對象。抽象產品角色是具體產品繼承的父類或者是實現的接口,一般由抽象類或者接口來實現。
package JAVA_Project_01_05;
/*
實現工廠方法模式的技術要點如下:
· 工廠方法模式去掉了簡單工廠模式中工廠方法的靜態屬性,使得它可以被子類繼承。這樣在簡單工廠模式裏集中在工廠方法上的壓力可以由工廠方法模式裏不同的工廠子類來分擔。
· 工廠方法模式由抽象工廠角色、具體工廠角色、抽象產品角色和具體產品角色組成。
· 抽象工廠角色是工廠方法模式的核心,它與應用程序無關,是具體工廠角色必須實現的接口或者必須繼承的父類,它由抽象類或者接口來實現。
· 具體工廠角色含有與具體業務邏輯有關的代碼。由應用程序調用以創建對應的具體產品的對象。抽象產品角色是具體產品繼承的父類或者是實現的接口,一般由抽象類或者接口來實現。
*/
interface Tour {//旅遊類
void visit();//旅遊方式
}
interface Visit {//具體旅遊方式
Tour visitStyle();
}
class GoAbroad implements Tour {//出國旅遊
public void visit() {//實現接口的方法
System.out.println("咱們去國外旅遊吧!");
}
}
class Hangzhou implements Tour {//杭州旅遊
public void visit() {
System.out.println("杭州風景優美,咱去那兒吧");
}
}
class Home implements Tour {//在家
public void visit() {
System.out.println("唉,沒有錢哪也去不了!");
}
}
class GoAbroadVisit implements Visit {//返回出國旅遊對象
public Tour visitStyle() {
return new GoAbroad();
}
}
class HangZhouVisit implements Visit {//返回杭州旅遊對象
public Tour visitStyle() {
return new Hangzhou();
}
}
class HomeVisit implements Visit {//返回在家對象
public Tour visitStyle() {
return new Home();
}
}
public class TextMethodFactory {//操作工廠方法模式的類
public static void main(String[] args) throws Exception {//Java程序主入口處
try {
Visit visit = new HangZhouVisit();//接口變量引用實現類對象
Tour tour = visit.visitStyle();//調用方法返回旅遊實例
System.out.println("今年咱們去哪兒旅遊呀?");
tour.visit();//調用方法獲得旅遊方式
} catch (Exception e){//捕獲異常
System.out.println("今年旅遊計劃取消?");
} finally {//代碼總被執行
System.out.println("......");
}
}
}
/*
程序中定義兩個接口、三個接口的實現類以及三個調用實現類的工廠類。可以看出使用工廠方法模式,使得對象的數量成倍增長。
當旅遊(對象)的方式非常多時,會出現大量的與之對應的工廠對象,這並不是我們所希望的。因爲如果不能避免這種情況,
可以考慮使用簡單工廠模式與工廠方法模式相結合的方式來減少工廠類,即對於旅遊(對象)方式類似的種類使用簡單工廠模式。
*/