什么是简单工厂类呢?
简单工厂类的最大优点是在工厂逻辑中包含了必要的逻辑判断,根据客户端选择的条件动态创建对象。
看看下面这段代码,你应该有所顿悟:
Person.java里面写一个抽象方法。
public abstract void dowork();
Child.java
public class Child extends Person{ public void dowork() { System.out.println("学生写作业"); }
Old.java
public class Old extends Person{ public void dowork(){ System.out.println("看着孩子写作业"); }
SimpleFactory.java
public class SimpleFactory { public Person createPerson(String name) { if (name.equals("old")) { return new Old(); } else { return new Child(); } } }
测试类:
public static void main(String[] args) { SimpleFactory simpleFactory = new SimpleFactory(); Person p = simpleFactory.createPerson("old"); p.dowork(); Person P2 = simpleFactory.createPerson("child"); P2.dowork(); }
什么事工厂方法呢?
我觉得很多书说的太专业了,有时让我们有点难懂,我觉得工厂方法就是通过一个方法创建对象。当然,这之间还要注意很多的逻辑关系。首先,让我们看一下几个代码片段。
Work.java
public interface Work { void doWork(); }
StudentWork.java
public class StudentWork implements Work{ @Override public void doWork() { // TODO Auto-generated method stub System.out.println("学生的工作"); } }
TeacherWork.java
public class TeacherWork implements Work{ @Override public void doWork() { // TODO Auto-generated method stub System.out.println("老师做的工作"); } }
注意了,重点来了。首先看一下我们的接口:
IWorkFactory.java
public interface IWorkFactory { Work getWork(); }
StudentFactoryMethod.java
public class StudentFactoryMethod implements IWorkFactory{ @Override public Work getWork() { // TODO Auto-generated method stub return new StudentWork(); } }
TeacherFactoryMethod.java
public class TeacherFactoryMethod implements IWorkFactory{ @Override public Work getWork() { // TODO Auto-generated method stub return new TeacherWork(); } }
测试类:
public static void main(String[] args) { IWorkFactory studentFactory = new StudentFactoryMethod(); studentFactory.getWork().doWork(); IWorkFactory teaFactory = new TeacherFactoryMethod(); teaFactory.getWork().doWork(); }
看了上面完整的设计方法,是不是有点明白,让我们用图来看的更清楚一些:
工厂模式主要适用于以下几个方面:
1.当一个类不知道它要创建那个类得对象时。
2.当一个类希望由它的子类来指定它所创建的对象的时候。