工厂模式是将对象的创建标准化。
interface Work {
public void doWork();
}
class TeacherWork implements Work {
@Override
public void doWork() {
System.out.println("老师上课!");
}
}
class StudentWork implements Work {
@Override
public void doWork() {
System.out.println("学生学习!");
}
}
/
interface WorkFactory {
public Work getWork();
}
class TeacherWorkFactory implements WorkFactory {
@Override
public Work getWork() { // 工厂方法
return new TeacherWork(); // 生产产品
}
}
class StudentWorkFactory implements WorkFactory {
@Override
public Work getWork() { // 工厂方法
return new StudentWork();
}
}
public class FactoryTest {
public static void test(WorkFactory factory) { // 多态参数,体现面向接口, 对象是什么不重要, 重要的是对象具有什么能力!!
Work work = factory.getWork(); // 既然是工厂, 就可以生产产品, 产品如何生产,质量如何 都不关心, 只关心能拿到合格产品即可
work.doWork(); // 拿到产品直接使用.
}
public static void main(String[] args) {
// 客户端
WorkFactory factory1 = new TeacherWorkFactory();
test(factory1);
WorkFactory factory2 = new StudentWorkFactory();
test(factory2);
}
上面的代码就是实现工厂模式的过程。在外部只需要创建工厂对象,然后利用工厂对象来获得产品对象。test()方法是一个比较通用的方法,利用了工厂类的多态,可以实现相同的代码实现不同的效果。
整个过程是分两条生产线进行的:老师工厂-->老师;学生工厂-->学生。工厂模式的好处是创建对象的形式已经固定,创建者不能自己随意更改创建形式和过程。
by Karl