java设计模式之工厂模式学习
2024-10-20 15:56:15
上周安排的写两篇设计模式的文章,结果一篇也没写,今天都给写了。回顾+反思。In this world he who stops ,won't get anything he wants!
工厂方法模式分为三种:
1.普通工厂模式 就是建立一个工厂类,对实现接口的一些类进行实例的创建
① 先建立一个“发送方法”的接口
package com.qiao.factory; public interface Sender {
public void send();
}
② 建一个邮件发送类
package com.qiao.factory; public class MailSendFactory implements Sender { public void send() {
System.out.println("send mail ");
}
}
③ 建一个短信发送类
package com.qiao.factory; public class SMSSendFactory implements Sender { public void send() {
System.out.println("send sms ");
} }
④ 工厂类
package com.qiao.factory; public class SendFactory { public Sender produce(String type){
if("sms".equals(type)){
return new SMSSendFactory();
}else if("mail".equals(type)){
return new MailSendFactory();
}else {
throw new RuntimeException("请输入正确的类型");
}
} }
⑤ 测试
@Test
public void test1(){
String type = "ssms";
Sender send = new SendFactory().produce(type);
send.send();
}
输出 : send sms
2.多个工厂模式 是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象。
① 工厂类改为
package com.qiao.factory; public class SendFactory2 { public Sender mailSenderProduce(){
return new MailSendFactory();
}
public Sender SmsSendProduce(){
return new SMSSendFactory();
}
}
② 测试
@Test
public void test2(){
Sender send = new SendFactory2().mailSenderProduce();
send.send();
}
输出 : send mail
3.静态工厂方法 就是将上面的方法改为静态方法,这样就不用new了
① 将工厂类改为
package com.qiao.factory; public class SendFactory3 { public static Sender mailSenderProduce(){
return new MailSendFactory();
}
public static Sender SmsSendProduce(){
return new SMSSendFactory();
}
}
②测试
@Test
public void test3(){
Sender send = SendFactory3.mailSenderProduce();
send.send();
}
输出 :
send mail
以上例子都是抄别人的,写出来好让自己能更好的了解一下。
原文 http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html
最新文章
- [转]如何判断js中的数据类型
- hdu 1030 Delta-wave
- C语言回顾-函数和位运算
- [AaronYang]C#人爱学不学[7]
- Creating Directives that Communicate
- JavaWeb学习记录(六)——用户登录功能之Cookie
- PHP中数组转换为XML格式
- 如何在hadoop中控制map的个数
- Binary Numbers(HDU1390)
- javascript第十七课:this使用
- 【 D3.js 入门系列 — 4 】 如何使用比例尺( scale )
- OWC11生成统计图案例
- noip借教室 题解
- JavaScript 数组基础知识
- java小知识点汇总
- SamplesHashtable
- arcgismanager登陆信息不对
- 如何用Eclipse+maven创建servlet 3.0 web 项目
- 【python-excel】Selenium+python自动化之读取Excel数据(xlrd)
- BZOJ 2460: [BeiJing2011]元素
热门文章
- Shell基本知识
- vi基本状态
- 大数据-hive安装
- Angular material mat-icon 资源参考_Av
- linux 系统管理(三) 系统信息查看 inx
- odoo 二次开发的一些原理
- kafka的安装及基本使用
- Git删除和恢复文件
- sql 获取当天开始时间 结束时间
- Testlink 机器重启后Access denied for user 'admin '@'localhost' (using password: YES)解决