你的位置:首页 > Java教程

[Java教程]1 设计模式


  工厂方法模式适用于“大量的产品需要频繁创建,并且具有同样的接口时使用”。

一、普通工厂模式   对于实现了同一个接口的一些类进行统一实例的创建,把这个统一创建的工作交给一个类来实现,这个类就叫做工厂类。

     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