实现工厂方法模式的技术要点如下:
· 工厂方法模式去掉了简单工厂模式中工厂方法的静态属性,使得它可以被子类继承。这样在简单工厂模式里集中在工厂方法上的压力可以由工厂方法模式里不同的工厂子类来分担。
· 工厂方法模式由抽象工厂角色、具体工厂角色、抽象产品角色和具体产品角色组成。
· 抽象工厂角色是工厂方法模式的核心,它与应用程序无关,是具体工厂角色必须实现的接口或者必须继承的父类,它由抽象类或者接口来实现。
· 具体工厂角色含有与具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。抽象产品角色是具体产品继承的父类或者是实现的接口,一般由抽象类或者接口来实现。
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("......");
}
}
}
/*
程序中定义两个接口、三个接口的实现类以及三个调用实现类的工厂类。可以看出使用工厂方法模式,使得对象的数量成倍增长。
当旅游(对象)的方式非常多时,会出现大量的与之对应的工厂对象,这并不是我们所希望的。因为如果不能避免这种情况,
可以考虑使用简单工厂模式与工厂方法模式相结合的方式来减少工厂类,即对于旅游(对象)方式类似的种类使用简单工厂模式。
*/