一 概念:

  简单工厂模式就是通过一个工厂类根据参数动态创建对应的类。

二 案例

  我们以汽车作为例子,在现实生活中汽车只是一个抽象的产品,其中有很多类型的汽车才是具体产品,如奔驰、宝马、保时捷等等(当然每个品牌下还有各种版本,这就不做讨论了,假设每个品牌就对应一种车)。简单类图如下:

当我们去综合类型的店买车要试开车时,销售员可能最简单直接的方法就是直接拿出他们最畅销的车子出来让你试驾。简易代码如下:

public class CarTest {

    public static void main(String[] args) {
BenzCar car = new BenzCar();
car.driver();
}
}

如果你想试驾宝马车时就如上面代码,会直接拿出该品牌的车。然而当客户想换品牌的时候,就得重新改客户端代码然后在重新new出对应的车来,这样就非常麻烦。

然而简单工厂就可以解决这个问题,把所有车的品牌统计出来,我们只要传入品牌这个参数就可以创建相应车的实例,这样就可避免客户每次换车的时候都要重新改代码。如下

 public class CarFactory {
/**
* @description 汽车工厂方法,根据汽车品牌类型创建对应车的实例
* @param type 品牌
* @return
* @author YuanFY
* @date 2017年8月5日 上午11:22:53
* @version 1.0
*/
public static Car newCar(String type) {
switch (type) {
case "Benz":
return new BenzCar();
case "BMW":
return new BenzCar();
case "Porsche":
return new BenzCar();
default:
return new Car();
}
}
}
public class CarTest { public static void main(String[] args) {
Car car = CarFactory.newCar("Benz");
car.driver();
}
}

针对这种需求通过简单工厂方法还是方便的。(感觉这个例子有点勉强,希望各位能懂)

三 优缺点

  优点:优化了客户端的代码,明确了各自的职责和权力,其中工厂类是整个模式的关键。

  缺点:工厂类集中了所有实例的创建逻辑,它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同条件创建不同实例的需求.这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利;

 

简单工厂设计模式--Java设计模式(一)的更多相关文章

  1. Unity设计模式+Java设计模式,讲解+案例+PPT,一次性学会设计模式,拥抱高薪!

    一个程序员对设计模式的理解:“不懂”为什么要把很简单的东西搞得那么复杂.后来随着软件开发经验的增加才开始明白我所看到的“复杂”恰恰就是设计模式的精髓所在,我所理解的“简单”就是一把钥匙开一把锁的模式, ...

  2. SimpleFactoryPattern(简单工厂模式)-----Java/.Net

    工厂模式是最常用的一种创建型模式,通常所说的工厂模式一般是指工厂方法模式.本篇是是工厂方法模式的“小弟”,我们可以将其理解为工厂方法模式的预备知识,它不属于GoF 23种设计模式,但在软件开发中却也应 ...

  3. 简单工厂模式--java代码实现

    简单工厂模式 工厂,生产产品的场所.比如农夫山泉工厂,生产农夫山泉矿泉水.茶π等饮料.矿泉水和茶π都属于饮料,都具有解渴的功能,但是每种饮料给人的感觉是不一样的.矿泉水和茶π在Java中相当于子类,饮 ...

  4. 简单工厂模式-Java篇

    简单工厂模式就是考虑如何实例化对象的问题,就是说到底要实例化谁,将来会不会增加实例化对象,比如计算器类中增加开根元素,应该考虑用一个单独的类来创造实例的过程,这就是工厂.下面将利用计算器类举例,解释简 ...

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

    工厂模式 目录 何为工厂模式 工厂方法与抽象工厂 如何在Java EE中通过@Producers与@Inject注解实现工厂模式 如何创建自定义注解以及通过@Qualifier消除具体实现之间的歧义 ...

  6. Java设计模式(一) 简单工厂模式不简单

    摘要:本文介绍了简单工厂模式的概念,优缺点,实现方式,以及结合Annotation和反射的改良方案(让简单工厂模式不简单).同时介绍了简单工厂模式(未)遵循的OOP原则.最后给出了简单工厂模式在JDB ...

  7. 设计模式(一)简单工厂(创建型)(Java&&PHP)

    面向对象设计的基本原则 单一职责系统中的每一个对象应该只有一个单独的职责,所有对象关注的应该是自身职责的完成. 基本思想:高内聚,低耦合. 开闭原则一个对象对扩展开放,对修改关闭.基本思想:对类的改动 ...

  8. Java设计模式(三) 抽象工厂模式

    原创文章,同步发自作者个人博客,转载请注明出处 http://www.jasongj.com/design_pattern/abstract_factory/ 抽象工厂模式解决的问题 上文<工厂 ...

  9. Java设计模式(二) 工厂方法模式

    本文介绍了工厂方法模式的概念,优缺点,实现方式,UML类图,并介绍了工厂方法(未)遵循的OOP原则 原创文章.同步自作者个人博客 http://www.jasongj.com/design_patte ...

随机推荐

  1. Java Web开发环境配置(JDK+Tomcat++IDEA 14)

    对于未接触过java web开发的大家而言,应该和我一样对java web编程开发比较迷茫,通过查一些资料,大致清楚了java web开发环境的一些基本配置,未做过相关编程的人员可以看一看,由于我刚接 ...

  2. React.js 小书介绍

    React.js 小书 Github 关于作者 这是一本关于 React.js 的小书. 因为工作中一直在使用 React.js,也一直以来想总结一下自己关于 React.js 的一些知识.经验.于是 ...

  3. html模板中的数字保留两位小数

    <script> //html模板中的数字保留两位小数 function formatCurrency(num) { num = num.toString().replace(/\$|\, ...

  4. cURL模拟网页登陆

    <?php /** * Created by PhpStorm. * User: Administrator * Date: 2016/7/13 * Time: 23:15 */ $data=' ...

  5. Linux常用操作命令(三)

    查看linux日志某几行 用逆序显示命令tail查看 命令格式:tail [  -r ] [  -n Number ] [ File ] [一]从第3000行开始,显示1000行.即显示3000~39 ...

  6. 【Android Developers Training】 100. 使用Intent修改联系人数据

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  7. flex sqlite基本用法

    flex sqlite基本用法 页面 <?xml version="1.0" encoding="utf-8"?> <s:WindowedAp ...

  8. Vijos 1004 伊甸园日历游戏 博弈

    描述 Adam和Eve玩一个游戏,他们先从1900.1.1到2001.11.4这个日期之间随意抽取一个日期出来.然后他们轮流对这个日期进行操作: 1 : 把日期的天数加1,例如1900.1.1变到19 ...

  9. mybatis学习笔记(二)-- 使用mybatisUtil工具类体验基于xml和注解实现

    项目结构  基础入门可参考:mybatis学习笔记(一)-- 简单入门(附测试Demo详细过程) 开始体验 1.新建项目,新建类MybatisUtil.java,路径:src/util/Mybatis ...

  10. 1.0 配置 appium + java的环境

    1. 配置 appim的环境前面中写到.       2. 在eclipse中配置 java 环境, 具体步骤:       <1>:在 eclipse 中新建 一个java 项目.   ...