工厂方法模式适用于“大量的产品需要频繁创建,并且具有同样的接口时使用”。
一、普通工厂模式 对于实现了同一个接口的一些类进行统一实例的创建,把这个统一创建的工作交给一个类来实现,这个类就叫做工厂类。
Job接口 (定义了要做的事情)
1 public interface Job {2 public void say();3 }
View Code
ReadJob实现类,实现Job接口,实现Job接口定义的方法:
1 public class ReadJob implements Job {2 @Override3 public void say() {4 System.out.println("This is read Job");5 }6 }
View Code
WriteJob实现类,实现Job接口,实现Job接口定义的方法:
1 public class WriteJob implements Job {2 @Override3 public void say() {4 System.out.println("This is write Job");5 }6 }
View Code
普通工厂通过共有方法传递参数的形式获取返回的实例,如
1 public class SimpleJobFactory { 2 public static final String READ="read"; 3 public static final String WRITE="write"; 4 public Job produce(String type) 5 { 6 if(READ.equalsIgnoreCase(type)) 7 { 8 return new ReadJob(); 9 }else if(WRITE.equalsIgnoreCase(type))10 {11 return new WriteJob();12 }else13 {14 System.out.println("Parameter type error,can not create object");15 return null;16 }17 }18 }
View Code
测试用例:根据参数生成具有统一接口的两个对象实例
1 public class SimpleJobFactoryTest {2 public static void main(String[] args) {3 SimpleJobFactory factory=new SimpleJobFactory();4 Job job1=factory.produce(SimpleJobFactory.READ);5 job1.say();6 Job job2=factory.produce(SimpleJobFactory.WRITE);7 job2.say();8 }9 }
测试输出:
1 This is read Job2 This is write Job
二、多个工厂方法模式,是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象。
1 public class MethodsJobFactory {2 public Job produceReadJob(){3 return new ReadJob();4 }5 public Job produceWriteJob(){6 return new WriteJob();7 }8 }
测试代码:
1 public class MethodsJobFactoryTest {2 public static void main(String[] args) {3 MethodsJobFactory factory=new MethodsJobFactory();4 Job job1=factory.produceReadJob();5 Job job2=factory.produceWriteJob();6 job1.say();7 job2.say();8 }9 }
测试结果:
1 1 This is read Job2 2 This is write Job
三、静态工厂方法模式,将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可。
public class MethodsJobStaticFactory { public static Job produceReadJob(){ return new ReadJob(); } public static Job produceWriteJob(){ return new WriteJob(); }}
测试代码:
1 public class MethodsJobStaticFactoryTest {2 public static void main(String[] args) {3 Job job1=MethodsJobStaticFactory.produceReadJob();4 Job job2=MethodsJobStaticFactory.produceWriteJob();5 job1.say();6 job2.say();7 }8 }
测试结果:
1 This is read Job2 This is write Job
下一篇对抽象工厂模式进行学习。
2016-07-27 22:02:40
原标题:1 设计模式
关键词:设计模式