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

  1. 浅析JAVA设计模式之工厂模式(一)

    1 工厂模式简单介绍 工厂模式的定义:简单地说,用来实例化对象,取代new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...

  2. Java设计模式之工厂模式(Factory模式)介绍(转载)

    原文见:http://www.jb51.net/article/62068.htm 这篇文章主要介绍了Java设计模式之工厂模式(Factory模式)介绍,本文讲解了为何使用工厂模式.工厂方法.抽象工 ...

  3. Java 设计模式之工厂模式(二)

    原文地址:Java 设计模式之工厂模式(二) 博客地址:http://www.extlight.com 一.背景 本篇内容是 Java 设计模式创建型模式的第二篇.上一篇主题为 <Java 设计 ...

  4. 浅析JAVA设计模式之工厂模式(二)

    1 工厂方法模式简单介绍 工厂方法 (Factroy Method)模式:又称多态性工厂模式(Polymorphic Factory),在这样的模式中,核心工厂不再是一个详细的类.而是一个抽象工厂,提 ...

  5. java设计模式2————工厂模式

    1.工厂模式介绍: 1.1.实现了创建者与调用者的分离 1.2.详细分类: 简单工厂模式 工厂方法模式 抽象工厂模式 1.3.所遵循的OOP原则: 开闭原则:对扩展开放,对修改关闭 依赖倒转原则:面向 ...

  6. java 设计模式之工厂模式与反射的结合

    工厂模式: /**  * @author Rollen-Holt 设计模式之 工厂模式  */   interface fruit{     public abstract void eat(); } ...

  7. Java设计模式之工厂模式(Factory)

    前言: 前面学习了建造者设计模式,接下来学习一下Retrofit中使用的另外一个设计模式,工厂设计模式!!!里面采用工厂模式使得数据转换得到完全解耦,工厂模式的好处用到了极致,如此好的设计模式我们怎能 ...

  8. JAVA设计模式--抽象工厂模式

    抽象工厂设计模式 1.系统中有多个产品族,而系统一次只可能消费其中一族产品2.同属于同一个产品族的产品以其使用.来看看抽象工厂模式的各个角色(和工厂方法的如出一辙):抽象工厂角色: 这是工厂方法模式的 ...

  9. Java设计模式之-----工厂模式(简单工厂,抽象工厂)

    一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factor ...

随机推荐

  1. 部署LAMP架构及其应用

    部署企业LAMP架构 (一)首先安装Apache服务,具体请见另一篇关于Apache的博文. (二)安装MySQL数据库,具体请见另一篇关于LNMP的博文. (三)构建PHP运行环境 1.安装PHP ...

  2. PL/SQL数据库开发那点事

    PL/SQL数据库开发那点事-->编程,存储程序 在SQL*plus 中编写PL/SQL程序,并在SQL*plus 中执行它, PL/SQL块的代码就存放在SQL*plus的缓冲区中.如果在SQ ...

  3. java 优秀文章集锦

    一个简易的静态网页服务器  https://www.cnblogs.com/longfurcat/p/10355514.html   浅析Servlet执行原理   https://www.cnblo ...

  4. Python实现——二层BP神经网络

    2019/4/23更新 下文中的正确率极高是建立在仅有50组训练数据的基础上的,十分不可靠.建议使用提供的另一个生成训练集的generate_all函数,能产生所有可能结果,更加可靠. 2019/4/ ...

  5. java 上传文件大小转换为 GB/MB/KB/B

    1.工具类 package cn.cmodes.common.utils; import java.io.File; import java.io.FileInputStream; import ja ...

  6. python(unittest)报告导出(一):使用HTMLTestRunner导出

    (前提:HTMLTestRunner.py放在python安装目录的Lib文件夹下) 一般将HTMLTestRunner.py文件放入需要引用的目录下,但这个太过于局限,仅对当前项目有用,所以可以将H ...

  7. POJ 2253-Frogger(最小生成树的最大权)

    原题链接:点击此处 题意: 一只叫Freddy的青蛙蹲坐在湖中的一块石头上.突然他发现一只叫Fiona的青蛙在湖中的另一块石头上.Freddy想要跟Fiona约会,但由于湖水太脏,他不想游泳过去而是跳 ...

  8. 【算法笔记】B1050 螺旋矩阵

    1050 螺旋矩阵 (25 分)   本题要求将给定的 N 个正整数按非递增的顺序,填入“螺旋矩阵”.所谓“螺旋矩阵”,是指从左上角第 1 个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为 m 行  ...

  9. java程序没有运行选项

    1.检查module是否正确 确保src为资源文件 2.检查是否有main函数

  10. Linux - 组管理和权限管理

    l Linux组基本介绍 在linux中的每个用户必须属于一个组,不能独立于组外.在linux中每个文件有所有者.所在组.其它组的概念. 1) 所有者 2) 所在组 3) 其它组 4) 改变用户所在的 ...