设计模式之工厂模式

参考资料:http://blog.csdn.net/zhangerqing/article/details/8194653

  所谓工厂模式,就是对一些实现实现了同一个接口的类的创建。

  首先,先要有一个统一的接口。代码如下:

1 package com.Yang.Factory;
2 
3 public interface Sender {
4     public void send();
5 }

  然后是测试类,SmsSender。代码如下:

1 package com.Yang.Factory;
2 
3 public class SmsSender implements Sender {
4     @Override
5     public void send() {
6         System.out.println("这里是SmsSender类的send方法!");
7     }
8 }

  然后是第二个测试类,MailSender。代码如下:

1 package com.Yang.Factory;
2 
3 public class MailSender implements Sender {
4     @Override
5     public void send() {
6         System.out.println("这里是MailSender类的send方法!");
7     }
8 }

  然后就是工厂类SendFactory。用来负责创建对象的一个类。

  首先是第一种工厂方法。提交参数创建。代码如下:

 1 package com.Yang.Factory;
 2 
 3 public class SendFactory {
 4     public Sender Create(String type) {
 5         if ("Mail".equals(type)) {
 6             return new MailSender();
 7         }else if ("Sms".equals(type)) {
 8             return new SmsSender();
 9         }
10         else{
11             return null;
12         }
13     }
14 }

  然后测试方法:

1 package com.Yang.Factory;
2 
3 public class Test {
4     public static void main(String[] args) {
5         SendFactory sFactory = new SendFactory();
6         Sender sender = sFactory.Create("Mail");
7         sender.send();
8     }
9 }

输出信息:这里是MailSender类的send方法!   成功的创建了所需要的类的实例。这种方法可以根据所需要输入参数来创建对应的的实例。缺点就是如果输入了不正确的字符串,将无法创建出正确的实例。

 

接下来是第二种工厂方法,修改工厂方法:

 1 package com.Yang.Factory;
 2 
 3 public class SendFactory {
 4     public Sender CreateSmsSender()
 5     {
 6         return new SmsSender();
 7     }
 8     public Sender CreateMailSender() {
 9         return new MailSender();
10     }
11 }

测试代码如下:

 

1 package com.Yang.Factory;
2 
3 public class Test {
4     public static void main(String[] args) {
5         SendFactory sFactory = new SendFactory();
6         Sender sender = sFactory.CreateMailSender();
7         sender.send();
8     }
9 }

输出信息:这里是MailSender类的send方法!  这种工厂方法的好处是可以根据需要使用具体的方法来获取创建的实例。缺点是在获取实例之前需要先实例一个工厂类。所以还有第三种工厂方法,只需要将工厂类的创建方法改为静态方法即可,对应代码如下所示:

 1 package com.Yang.Factory;
 2 
 3 public class SendFactory {
 4     public static Sender CreateSmsSender()
 5     {
 6         return new SmsSender();
 7     }
 8     public static Sender CreateMailSender() {
 9         return new MailSender();
10     }
11 }

测试代码如下:

1 package com.Yang.Factory;
2 
3 public class Test {
4     public static void main(String[] args) {
5         Sender sender = SendFactory.CreateMailSender();
6         sender.send();
7     }
8 }

这种方法的好处就是可以直接调用不需要实例出工厂类的实例即可。

 

你可能感兴趣的:(设计模式之工厂模式)