从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。

下面模拟使用简单工厂模式实现的需求:

需求:假设现在的我们需要对数据库中的内容进行输出,需要依赖于一个输出的类,但现在有两种方式进行输出,分别是:excel与word;(这里我简单模拟,因此代码会很简单);

  1. 首先我们先用写一个输出方式的接口,代码如下:

public interface Print
{public void outPrint();
}

2.然后需要写出它的两个实现类,如下:
excel方式:

public class ExcelImpl implements Print
{@Overridepublic void outPrint(){System.out.println("使用excel进行导出");}
}

word方式:

public class WordImpl implements Print
{@Overridepublic void outPrint(){System.out.println("使用word进行导出");}
}

3.然后实现一个工厂类:

public class PrintFactory
{/*** 用于获取print实例的方法* */public Print getPrint(){/*** 这里默认返回的是excel方式进行导出* */return new ExcelImpl();}
}

4.进行简单工厂方式的实现:

public class DataOutput
{public static void main(String[] args){/*** 实例化工厂类* */PrintFactory printFactory = new PrintFactory();/*** 实例化调用的类,通过构造方法来对DataOutput对象进行初始化* */DataOutput dataOutput = new DataOutput(printFactory.getPrint());dataOutput.output();}private final Print print;public DataOutput(Print print){this.print = print;}/*** 模拟导出,这里就是需要调用其他对象中的方法进行实现*/public void output(){print.outPrint();}
}

好了,接下来我们只要点击运行就会在控制台出现:使用excel进行导出;
如果由于需求的改变需要使用word来进行导出,很简单,我们只需要修改工厂类中的方法即可,其他都不需要变:

public class PrintFactory
{/*** 用于获取print实例的方法* */public Print getPrint(){/*** 这里默认返回的是excel方式进行导出* */// return new ExcelImpl();/*** 更改为使用word方式进行导出* */return new WordImpl();}
}

到此我们已经实现了一个简单工厂模式,我们能够很明显的感觉到该模式的优势:让对象的调用者与对象创建过程进行分离,当对象调用者需要对象时只需直接向工厂请求即可,
从而避免了对象调用者与对象实现类以硬编码方式进行耦合。就如上面的程序,即使Print接口有很多实现类,我们只需要到工厂类中进行更换实现类的实例化即可,其他不需要

更改,这里也显示了面向接口编程的优势,这样对象的调用者就与接口进行耦合而不是与实现类,与接口耦合的好处就是接口可以有多个实现类,保证了我们可以不去修改接口,

而只是添加或者修改一个实现类即可;

总结下简单工厂模式:不知道大家有没有发现一个问题就是上面管理实例分配的工厂类中,现在只能每次为其分配一个实例,如果要配置多个实例就需要在工厂类中就行逻辑

判断:

public class PrintFactory
{/*** 用于获取print实例的方法* */public Print getPrint(Integer param){if(param == 1){/*** 这里默认返回的是excel方式进行导出* */return new ExcelImpl();}else if(param == 2){/*** 更改为使用word方式进行导出* */return new WordImpl();}else{return null;}}
}

简单工厂模式的有缺点:

优点:该模式的核心就是工厂类,这个类中含有必要的判断逻辑,可以决定在什么时候创建哪个产品类的实例。客户端可以免除直接创建产品对象的责任。

缺点:1.工厂类集中了所有产品创建逻辑,形成一个无所不知的全能类,对于这样的类我们很难进行控制

转载于:https://blog.51cto.com/sky2012/1624454

设计模式------简单工厂模式相关推荐

  1. JavaScript设计模式--简单工厂模式例子---XHR工厂

    JavaScript设计模式--简单工厂模式例子---XHR工厂 第一步,Ajax操作接口(目的是起一个接口检测作用) (1)引入接口文件 //定义一个静态方法来实现接口与实现类的直接检验 //静态方 ...

  2. 三角形圆形创建与擦除java_设计模式---------------简单工厂模式

    设计模式---------------简单工厂模式 一.题目(Question) 使用简单工厂模式设计一个可以创建不同几何形状(如圆形.方形和三角形等)的绘图工具,每个几何图形都要有绘制draw()和 ...

  3. 设计模式—简单工厂模式

    前言 简单工厂模式是一种比较容易理解的设计模式 简单工厂模式介绍 在设计模式中,简单工厂模式可以理解为负责生产对象的一个类,当使用new 关键字创建一个对象时,此时该类就依赖于这个对象,也就是他们间的 ...

  4. 设计模式 - 简单工厂模式

    文章目录 设计模式 - 简单工厂模式 1.意图 2.实例 1.创建颜色接口 - 定义生产的产品是什么 2.创建颜色枚举 - 定义生产哪些类型的产品 3.根据颜色枚举创建产品 - 根据产品清单生产产品 ...

  5. 设计模式--简单工厂模式

    什么是工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在工厂模式中,我们在创建对象时不会对 ...

  6. C#设计模式--简单工厂模式

    设计模式: 简单工厂模式(Simple Factory Pattern) 介绍:简单工厂模式不是Gof23种设计模式之一.但它在实际的编程中经常被用到,而且思想也非常简单,下面简单举例说明: 简单工厂 ...

  7. C++设计模式--简单工厂模式

    概述 工厂模式:封装对象的实现.它可能是所有设计模式中最有用的模式之一了.这里要说的是简单工厂模式,又称为静态方法工厂模式,属于创建性模式.其原理就是通过传入的参数来判断应该创建什么对象. UML 类 ...

  8. 设计模式 简单工厂模式

    简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂 ...

  9. 面向对象编程设计模式--简单工厂模式讲解(历史上最简单明白的例子)

    工作之余,在看资料过程中发现一个极易理解的简单工厂模式的例子,自己亲自试练一番,感觉对这个设计模式不熟悉的朋友, 一看马上就知道是什么回事了. 简单工厂模式根据提供给它的数据,返回几个可能类中的一个类 ...

  10. java工厂模式 uml_深入浅出设计模式-简单工厂模式

    模式定义 简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式定义了一个创建对象的类,由这个类来封装实例化 ...

最新文章

  1. python sorted()
  2. 解决计算机改名无法连接TFS的问题
  3. javaweb学习总结(四)——Http协议
  4. vue 3.0和2.0区别_一文看懂 Vue.js 3.0 的优化
  5. 数平精准推荐 | OCR技术之系统篇
  6. ASP.NET 对类进行XML序列化和反序列化
  7. 链表的C++创建及翻转
  8. iOS ipv6审核被拒绝的解决方案(已审核通过)
  9. C++基础知识(七)new和delete
  10. ubuntu中mysql安装失败
  11. js编码后提交java解码
  12. Android P新特性
  13. 联想i5安装JAVA_lenovo联想G410笔记本安装系统
  14. matlab的double和single类型
  15. 论文阅读笔记《Deep Graph Matching under Quadratic Constraint》
  16. 天龙八部 - 其它 - 手工选择
  17. Graphviz解决图论简单画图
  18. 首批最佳骑行路线揭晓
  19. Linux下载hfs文件,linux读写mac HFS+
  20. win10开机启动项(win10开机启动项无法启动)

热门文章

  1. uniapp uView u-picker组件三级联动Demo
  2. PHP调微信小程序接口:生成小程序码,常见问题
  3. golang 微信小程序获取二维码scene参数报错 invalid scene rid: f05f96ab-5382f139-14b13d2f
  4. PHP根据开始、结束时间:计算开始、结束时间占当月总天数的百分比
  5. Golang web请求
  6. Mysql 查询某个字段最长的记录
  7. 六石编程学:功能要定期测试
  8. 六石管理学:行政人员也要学会使用SVN保存文档
  9. MAC编译OpenJDK8:error: invalid argument ‘-std=gnu++98‘ not allowed with ‘C‘
  10. imsdroid启动Activity的方式很独特