工厂方法模式是一种创建型设计模式,它将对象(产品)的创建交给一个工厂(通过工厂的接口,即面向接口进行)。当需要生成另一种产品时,只需要修改工厂的具体类型即可,工厂创建产品的部分不必进行修改。
下面以生产某本书的英译本或中译本为例。
首先明确在这个例子中要生产的产品为书本,它分为中译本和英译本。我们采用创建型的设计模式—工厂方法模式,将工厂接口命名为factory_printer,工厂的具体类有factory_printer_ch—负责生产中译本,factory_printer_en—负责生产英译本。
为了能够在获得工厂创建的产品后,对其进行统一的引用,即不必区分是中译本还是英译本,我们还需要一个书本的接口product_book,它也具有两个具体类product_book_ch和product_book_en。
首先是两个接口的定义:
interface product_book {
void sayContent(); //输出书本内容
}
interface factory_printer {
product_book print(); //印刷书本(即创建对象)
}
产品的两个具体类:
class product_book_ch implements product_book {
public void sayContent() {
System.out.println("这是一本中文书!");
}
}
class product_book_en implements product_book {
public void sayContent() {
System.out.println("This is an English book !");
}
}
工厂的两个具体类:
class factory_printer_ch implements factory_printer {
public product_book print() {
return new product_book_ch();
}
}
class factory_printer_en implements factory_printer {
public product_book print() {
return new product_book_en();
}
}
客户端调用:
public class Test {
public static void main(String[] args) {
//假如要生产英译本,仅需将factory_printer_ch改为factory_printer_en
factory_printer printer = new factory_printer_ch();
product_book book = printer.print();
book.sayContent(); //输出:这是一本中文书!
}
}