首页 > 代码库 > java设计模式之工厂模式

java设计模式之工厂模式

工厂模式,顾名思义,就是用一个工厂来生产一系列相同的对象,这里相同的对象是指实现相同接口或者继承统一父类的对象。

如果仅仅需要创建一两个对象,那么只需简单的new一个对象即可;如果需要创建大量对象,而这些对象恰恰都实现了某一个接口,那么使用工厂模式创建对象是比较优雅的。

工厂模式的各种解释就不多说了,这里写了一个小demo简单实现这种思想。

工厂模式又分为工厂方法模式和抽象工厂模式,后者目前我还是无法理解,等以后能够理解的那天再记录。所幸的是工厂方法模式用到的比较多吧。

小DEMO

创建一个接口:

1 public interface Sender {
2     /**
3      * 发送接口
4      */
5     void send();
6 }

有两个实现类实现该接口,分别发送邮件和短信

1 public class MailSender implements Sender {
2     @Override
3     public void send() {
4         System.out.println("mailSender.send()...");
5     }
6 }
1 public class SmsSender implements Sender {
2     @Override
3     public void send() {
4         System.out.println("smsSender.send()...");
5     }
6 }

当我想创建很多mailSender和smsSender时,需要不停的new来new去,这是我们需要一个发送工厂,你告诉我发什么我就发什么,实现起来比较优雅。

 1 public class SenderFactory {
 2 
 3     public static Sender createSender(Class<? extends Sender> senderClass)
 4     {
 5         try {
 6             Sender sender = senderClass.newInstance();      //反射获取实例
 7             return sender;
 8         } catch (InstantiationException e) {
 9             e.printStackTrace();
10         } catch (IllegalAccessException e) {
11             e.printStackTrace();
12         }
13         return null;
14     }
15 }

测试:

1 public class Test {
2     public static void main(String[] args) {
3         Sender sender = SenderFactory.createSender(MailSender.class);
4         sender.send();
5         sender = SenderFactory.createSender(SmsSender.class);
6         sender.send();
7     }
8 }

输出:

技术分享

挺好呵呵呵呵。

java设计模式之工厂模式