上周安排的写两篇设计模式的文章,结果一篇也没写,今天都给写了。回顾+反思。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

最新文章

  1. [转]如何判断js中的数据类型
  2. hdu 1030 Delta-wave
  3. C语言回顾-函数和位运算
  4. [AaronYang]C#人爱学不学[7]
  5. Creating Directives that Communicate
  6. JavaWeb学习记录(六)——用户登录功能之Cookie
  7. PHP中数组转换为XML格式
  8. 如何在hadoop中控制map的个数
  9. Binary Numbers(HDU1390)
  10. javascript第十七课:this使用
  11. 【 D3.js 入门系列 — 4 】 如何使用比例尺( scale )
  12. OWC11生成统计图案例
  13. noip借教室 题解
  14. JavaScript 数组基础知识
  15. java小知识点汇总
  16. SamplesHashtable
  17. arcgismanager登陆信息不对
  18. 如何用Eclipse+maven创建servlet 3.0 web 项目
  19. 【python-excel】Selenium+python自动化之读取Excel数据(xlrd)
  20. BZOJ 2460: [BeiJing2011]元素

热门文章

  1. Shell基本知识
  2. vi基本状态
  3. 大数据-hive安装
  4. Angular material mat-icon 资源参考_Av
  5. linux 系统管理(三) 系统信息查看 inx
  6. odoo 二次开发的一些原理
  7. kafka的安装及基本使用
  8. Git删除和恢复文件
  9. sql 获取当天开始时间 结束时间
  10. Testlink 机器重启后Access denied for user 'admin '@'localhost' (using password: YES)解决