设计模式之工厂方法(Factory Method)
package pkg.book;
//工厂主要生产物品的抽象接口(该工厂主要生产书本)
public interface Book {
public String name();
public int TotalPages();
public double price();
}
package pkg.book;
//工厂生产数学书
public class MathBook implements Book{
@Override
public int TotalPages() {
return 200;
}
@Override
public String name() {
return "Math Book";
}
@Override
public double price() {
return 17.5;
}
}
package pkg.book;
//工厂生产英语书
public class EnglishBook implements Book{
@Override
public int TotalPages() {
return 153;
}
@Override
public String name() {
return "English Book";
}
@Override
public double price() {
return 23.2;
}
}
import pkg.book.Book;
//利用了Java的反射机制来创造对象
public class Factory {
//Class<? extends Book> 表示Class的泛型是全部继承自Book,所以所有的Book子类都可以传给Class<? extends Book> c
public static Book create(Class<? extends Book> c)
{
Book book = null;
try {
System.out.println("ClassName: "+c.getName());
//创建对象
book = (Book)Class.forName(c.getName()).newInstance();
} catch (Exception e) {
System.err.println("error to create book!");
}
return book;
}
}
import pkg.book.EnglishBook;
import pkg.book.MathBook;
public class Main { //测试类
public static void main(String[] args) {
//直接通过XXX.class将类传入工厂
System.out.println(Factory.create(MathBook.class).name());
System.out.println(Factory.create(EnglishBook.class).name());
}
}
运行结果:
ClassName: pkg.book.MathBook Math Book ClassName: pkg.book.EnglishBook English Book
工厂方法相比与简单工厂显得更加的严整,而且工厂自身的创建新对象的方法变得很简单.
客户端只需要指定一下自己想要创建的类,就可以让工厂去生产了。
主要是Java的反射机制利用.
项目源码地址:http://www.kuaipan.cn/file/id_132802506211221471.htm?source=1

浙公网安备 33010602011771号