场景:

服务端编写API方法供客户端调用,需要将接口与实现分离,客户端不需要知道具体实现,高度解耦,面向接口的编程。

定义:

提供一个创建对象实例的功能,而无须关心其具体实现,被创建实例的类型可以是接口,抽象类,也可以是具体的类。

类比就像我们去工厂进货,但是不知道具体货物是如何产生的,可能从广东进货,也可能从北京进货,原料的供货商我们不清

楚,我们只向工厂要,工厂知道货物从哪儿来,由工厂负责具体的调度,然后货到了就给我们.

角色:

Api: 定义客户所需要的功能接口

package com.kris.study;public interface Api {public void operation(String s);
}

Impl:具体实现Api的实现类,可能有多个

package com.kris.study;public class ImplA implements Api{@Overridepublic void operation(String s) {System.out.println("implA s :"+s);}}
package com.kris.study;public class ImplB implements Api{@Overridepublic void operation(String s) {System.out.println("ImplB s:"+s);}}

Factory:工厂,选择合适的实现类来创建Api接口对象

package com.kris.study;public class Factory {enum Condition {IMPLA,IMPLB}public static Api createApi(Condition condition){Api api = null;if(condition == Condition.IMPLA){api = new ImplA();}else if (condition == Condition.IMPLB){api = new ImplB();}return api;}
}

Client:客户端,通过Factory来获取Api接口对象,然后面向Api接口编程

package com.kris.study;import com.kris.study.Factory.Condition;public class Client {public static void main(String[] args) {Api api = Factory.createApi(Condition.IMPLA);api.operation("lisi");}}

原理分析:

简单工厂内部主要的实现功能是选择合适的实现类。也就是需要一个选择条件或者参数,通常来源有三处

①.Client传入,客户端必须知道具体参数含义.

②.配置文件传入,比如获取XML中配置的实现类的名字通过反射得到具体实现类。

③.程序运行期的某个值,比如从缓存中获取的值。

优点:

封装解耦

缺点:

增加了客户端的复杂度,如果是Client传入,Client端就需要具体的含义和对应的实现类.可以使用IOC配置文件传入解决。

不方便扩展。

思考:

简单工厂将变化的地方交给工厂Factory来处理,使客户端和实现类解耦.难点在于如何选择,也就是传入参数的方式。

转载于:https://www.cnblogs.com/krislight1105/p/3748302.html

设计模式学习--------3.简单工厂模式学习相关推荐

  1. 23种设计模式 -----Day01:简单工厂模式

    目录 前言 1.设计模式(Design pattern)定义 2.为什么要使用设计模式(使用设计模式的意义) 3.设计原则 a.单一职责原则 b.开放封闭原则 c.里氏代换原则 d.迪米特法则 e.依 ...

  2. 设计模式 笔记4 | 简单工厂模式 在源码中的应用 | Calendar 日历 | 源码浅析 | 使用总结 | 建造者模式

    文章目录 一.Calendar 日历类 1.1 内部属性 1.2 设置时间属性值 1.3 获取时间属性 1.4 使用 Calander 计算时间 二.Calender 类中的设计模式 2.1 简单工厂 ...

  3. 设计模式之简单工厂模式学习笔记

    前言 简单工厂模式,又叫做静态工厂方法模式.属于创建型工厂模式,但是不属于23中设计模式.学习简单工厂模式,是为了更好地学习工厂方法模式. 定义 简单工厂模式,即静态工厂方法模式,是由一个工厂对象决定 ...

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

    模式概述: 专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类,简单工厂(Simple Factory)模式又称为静态工厂方法(Static Factory Method)模式,属 ...

  5. 设计模式再学习之简单工厂模式

    以前不明白为啥要设计模式这玩意到底有啥用呀.那么僵硬,学起来臭长.今天学了简单模式,突然发现,诶?这不是我日常运用的吗 简单工厂模式 这个模式究竟有啥用呢,我看了十章内容,觉得可以概括成一句话. 在一 ...

  6. 手撕设计模式之「简单工厂模式」(Java描述)

    前言 利用简单工厂模式可以实现对象创建和业务逻辑处理的分离,但存在工厂类职责过重,增添新产品违背开闭原则等问题.它不属于GoF 23种设计模式之一,但是它可以作为学习工厂方法模式前的一个很好的引导. ...

  7. 设计模式第一篇——简单工厂模式&类图

    从今天开始,小菜决定记录下来自己学习设计模式的过程,并总结每天所学内容记录在博客中. 以编写计算器程序为例,有+,-,*,/--很多种运算,因此需要if,else或switch,case进行判断,当有 ...

  8. 【C#设计模式】4-0. 简单工厂模式【创建型】

    [C#设计模式]总目录-共23种 [C#设计模式]简单工厂模式 前言 一.简单工厂模式定义 二.实例 三.进一步研究[违反开闭原则的解决方法] 四.简化简单工厂模式[将抽象产品类和工厂类合并] 五.简 ...

  9. 【设计模式】之简单工厂模式详解与应用(一)

    开心一刻 [老公:老婆老婆,我刚去买了15块钱水果. 老婆:然后呢? 老公:给了老板100块,那二货找了我95.你说他二不二? 老公:我当时撒腿就跑啊. 老婆:水果呢? 老公:-忘拿了- 开心不,笑了 ...

最新文章

  1. Java学习总结:55(偶对象保存:Map接口)
  2. 编程难学?3点解答你的疑惑
  3. java uuid会重复吗_记一次订单号重复的事故,快看看你的 uuid 在并发下还正确吗?...
  4. “无效数字” ;java.lang.Integer cannot be cast to java.lang.String
  5. Windows服务的创建、安装、调试
  6. esclip直接快捷键构造函数_史上最全IntelliJ IDEA mac版快捷键文档
  7. spring + hibernate + 实体类 注解配置代码
  8. matlab 输入方程组,弱弱地问,如何输入以下方程组?
  9. 电子政务方向:We7.Cloud政府云门户
  10. CSS3贝塞尔曲线$$动画效果
  11. MySQL 8.0安装记录
  12. IN与EXISTS优化
  13. 20.TCP/IP 详解卷1 --- TCP 的成块数据流
  14. python unittest接口测试_Python+unittest 接口自动化测试
  15. 这文字的起始位置_如何用AE快速制造文字特效视频的效果?3分钟教你学会
  16. 关于Activity的四种启动模式详解
  17. 树莓派的蓝牙通讯(bluez、gattlib)
  18. 写博客的第二天——来个水题,17倍
  19. 我收集了如下的一些语录
  20. rman命令之crosscheck

热门文章

  1. beanutil 批量copy_Apache Commons Beanutils对象属性批量复制(pseudo-singleton)
  2. matlab 图像读取默认值,实验一MATLAB数字图像处理
  3. idea alt+insert快捷键中implement
  4. 016_泛型常见通配符
  5. 036_CSS导航条
  6. 011_CSS子元素选择器
  7. oracle 日期加3个月,三个日期函数(十分有用)!!!!!!!!
  8. 评价算法的性能从利用计算机资源角度,计算机专业数据结构课后练习题汇编
  9. html中加session,Html中如何获取session中的值(如登录后显示XX欢迎您!)
  10. php postgresql多条,PHP操作Postgresql封装类与应用完整实例