标签:继承 ima iat ret pre com cat 对象 抽象
工厂模式,顾名思义,就是用一个工厂来生产一系列相同的对象,这里相同的对象是指实现相同接口或者继承统一父类的对象。
如果仅仅需要创建一两个对象,那么只需简单的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 }
输出:
挺好呵呵呵呵。
标签:继承 ima iat ret pre com cat 对象 抽象
原文地址:http://www.cnblogs.com/xiaosiyuan/p/6738785.html