java设计模式之工厂模式学习
上周安排的写两篇设计模式的文章,结果一篇也没写,今天都给写了。回顾+反思。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
java设计模式之工厂模式学习的更多相关文章
- 浅析JAVA设计模式之工厂模式(一)
1 工厂模式简单介绍 工厂模式的定义:简单地说,用来实例化对象,取代new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...
- Java设计模式之工厂模式(Factory模式)介绍(转载)
原文见:http://www.jb51.net/article/62068.htm 这篇文章主要介绍了Java设计模式之工厂模式(Factory模式)介绍,本文讲解了为何使用工厂模式.工厂方法.抽象工 ...
- Java 设计模式之工厂模式(二)
原文地址:Java 设计模式之工厂模式(二) 博客地址:http://www.extlight.com 一.背景 本篇内容是 Java 设计模式创建型模式的第二篇.上一篇主题为 <Java 设计 ...
- 浅析JAVA设计模式之工厂模式(二)
1 工厂方法模式简单介绍 工厂方法 (Factroy Method)模式:又称多态性工厂模式(Polymorphic Factory),在这样的模式中,核心工厂不再是一个详细的类.而是一个抽象工厂,提 ...
- java设计模式2————工厂模式
1.工厂模式介绍: 1.1.实现了创建者与调用者的分离 1.2.详细分类: 简单工厂模式 工厂方法模式 抽象工厂模式 1.3.所遵循的OOP原则: 开闭原则:对扩展开放,对修改关闭 依赖倒转原则:面向 ...
- java 设计模式之工厂模式与反射的结合
工厂模式: /** * @author Rollen-Holt 设计模式之 工厂模式 */ interface fruit{ public abstract void eat(); } ...
- Java设计模式之工厂模式(Factory)
前言: 前面学习了建造者设计模式,接下来学习一下Retrofit中使用的另外一个设计模式,工厂设计模式!!!里面采用工厂模式使得数据转换得到完全解耦,工厂模式的好处用到了极致,如此好的设计模式我们怎能 ...
- JAVA设计模式--抽象工厂模式
抽象工厂设计模式 1.系统中有多个产品族,而系统一次只可能消费其中一族产品2.同属于同一个产品族的产品以其使用.来看看抽象工厂模式的各个角色(和工厂方法的如出一辙):抽象工厂角色: 这是工厂方法模式的 ...
- Java设计模式之-----工厂模式(简单工厂,抽象工厂)
一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factor ...
随机推荐
- 简单的数字校验JS
/** *张衍涛 * 数字校验 v:校验的元素 l:要保留的小数点位数 */ function checkNumber(v,l){ var val=v.value; if(isNaN(val) || ...
- weex 编译vue成js
cd 项目 1.开发 npm run web 开发过程中可以直接使用浏览器运行 npm run ios 2.打包 npm run build 会在 dist 文件夹 中生成js文件, 即可拖入ios ...
- MyEclipse 汉化后切换回英文(中英文切换)
没事玩玩MyEclipse,按网上的办法把它汉化了!搞了些教程看,教程用的都是英文,还是把MyEclipse也切换回原来的英文得了! 方法:1.复制MyEclipse的快捷方式:2.右键快捷方式-&g ...
- WorldCount 结对项目
合作者:201631062501,201631062129 代码地址:https://gitee.com/guilinyunya/WorldCount 伙伴博客地址:https://www.cnblo ...
- kafka的安装及基本使用
1.安装zookeeper # 解压缩 [root@localhost zookeeper]# .tar.gz [root@localhost zookeeper]# zk_simple # 复制zo ...
- $bzoj1014-JSOI2008$ 火星人$prefix$ $splay$ $hash$
题面描述 火星人最近研究了一种操作:求一个字串两个后缀的公共前缀.比方说,有这样一个字符串:\(madamimadam\),我们将这个字符串的各个字符予以标号: 序号 1 2 3 4 5 6 7 8 ...
- Ubuntu no such file or directory
在运行可执行程序时,报错如上,检查步骤: 1.程序是否和Ubuntu版本位数一致. Linux系统查看:uname -a 程序版本查看:file <filename> 2.查看文件是否有可 ...
- ps如何替换有透明图片的颜色
修改透明图片的颜色 首先用魔棒工具点选颜色区域,然后再在菜单中找到 图像-调整-替换颜色,就可以选任意想要的颜色
- Android创建定时和周期任务
问题:应用需要按时执行某个操作,例如定时更新UI. 解决方案:使用Handler提供的定时操作功能.通过Handler,可以在指定的时间或是指定的延时后执行操作. 下面看一个在TextView中显示当 ...
- python web 框架的基本逻辑练习题
# -*- coding:utf-8 -*- # date : 2017/12/22 from wsgiref.simple_server import make_server # 首先是导入wsgi ...