设计模式之工厂模式
2016-01-04 00:00
218 查看
摘要: 工厂模式是我们最常用的实例化对象的模式,当我们在new同类时,尽量使用工厂模式,能够提高解耦和可扩展性。
设计模式之工厂模式
一、概述
2.2 普通工厂
2.3 多个工厂
2.4 抽象工厂
2.5 使用
设计模式之工厂模式
一、概述
1.1 简介
工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象。我们在new大量同类时,尽量使用工厂模式,能够提高解耦和可扩展性。二、实例
2.1 同类
接口 public interface Sender { public void Send(); } 类1 public class SmsSender implements Sender { @Override public void Send() { System.out.println("this is sms sender!"); } } 类2 public class MailSender implements Sender { @Override public void Send() { System.out.println("this is mailSender"); } }
2.2 普通工厂
public class CommonFactory { /** * @see 不同工厂类。输入名称 * @param type * @return */ public Sender produce(String type) { if ("mail".equals(type)) { return new MailSender(); } else if ("sms".equals(type)) { return new SmsSender(); } else { System.out.println("right type inside,place!"); return null; } } }
2.3 多个工厂
public class MultiFactory { /** * @See 多个工厂方法 * @see 缺点:如果需要添加新的方法,则需要修改源码 */ public Sender produceMail() { return new MailSender(); } public Sender produceSms() { return new SmsSender(); } // 静态工厂 public static Sender produceMailTwo() { return new MailSender(); } public static Sender produceSmsTwo() { return new SmsSender(); } }
2.4 抽象工厂
// 工厂接口 public interface Provider { /** * @see 工厂接口、每一个新的类只需要创建一个实现一个工厂接口 * @return */ Sender produce(); } //每一个基类都实现一个工厂 public class SmsFactory implements Provider { @Override public Sender produce() { return new SmsSender(); } } public class MailFactory implements Provider { @Override public Sender produce() { return new MailSender(); } }
2.5 使用
public static void main(String[] args) { // 1.普通:通过名字来实现。需要扩展必须修改源码 // CommonFactory cf = new CommonFactory(); // Sender sender = cf.produce("sms"); // sender.Send(); // 2.工厂方法:需要扩展必须修改源码 // MultiFactory mf = new MultiFactory(); // Sender sender = mf.produceMail(); // sender.Send(); // 3.静态工厂方法:需要扩展必须修改源码 // Sender sender = MultiFactory.produceMailTwo(); // sender.Send(); // 4.抽象工厂方法:需要扩展直接创建一个工厂接口的工厂(这个用法和行为模式比较类似) Provider provider = new SmsFactory(); Sender sender = provider.produce(); sender.Send(); } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序