什么是简单工厂类呢?
简单工厂类的最大优点是在工厂逻辑中包含了必要的逻辑判断,根据客户端选择的条件动态创建对象。
看看下面这段代码,你应该有所顿悟:
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.当一个类希望由它的子类来指定它所创建的对象的时候。