设计模式学习--------3.简单工厂模式学习
场景:
服务端编写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.简单工厂模式学习相关推荐
- 23种设计模式 -----Day01:简单工厂模式
目录 前言 1.设计模式(Design pattern)定义 2.为什么要使用设计模式(使用设计模式的意义) 3.设计原则 a.单一职责原则 b.开放封闭原则 c.里氏代换原则 d.迪米特法则 e.依 ...
- 设计模式 笔记4 | 简单工厂模式 在源码中的应用 | Calendar 日历 | 源码浅析 | 使用总结 | 建造者模式
文章目录 一.Calendar 日历类 1.1 内部属性 1.2 设置时间属性值 1.3 获取时间属性 1.4 使用 Calander 计算时间 二.Calender 类中的设计模式 2.1 简单工厂 ...
- 设计模式之简单工厂模式学习笔记
前言 简单工厂模式,又叫做静态工厂方法模式.属于创建型工厂模式,但是不属于23中设计模式.学习简单工厂模式,是为了更好地学习工厂方法模式. 定义 简单工厂模式,即静态工厂方法模式,是由一个工厂对象决定 ...
- 设计模式学习-简单工厂模式
模式概述: 专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类,简单工厂(Simple Factory)模式又称为静态工厂方法(Static Factory Method)模式,属 ...
- 设计模式再学习之简单工厂模式
以前不明白为啥要设计模式这玩意到底有啥用呀.那么僵硬,学起来臭长.今天学了简单模式,突然发现,诶?这不是我日常运用的吗 简单工厂模式 这个模式究竟有啥用呢,我看了十章内容,觉得可以概括成一句话. 在一 ...
- 手撕设计模式之「简单工厂模式」(Java描述)
前言 利用简单工厂模式可以实现对象创建和业务逻辑处理的分离,但存在工厂类职责过重,增添新产品违背开闭原则等问题.它不属于GoF 23种设计模式之一,但是它可以作为学习工厂方法模式前的一个很好的引导. ...
- 设计模式第一篇——简单工厂模式&类图
从今天开始,小菜决定记录下来自己学习设计模式的过程,并总结每天所学内容记录在博客中. 以编写计算器程序为例,有+,-,*,/--很多种运算,因此需要if,else或switch,case进行判断,当有 ...
- 【C#设计模式】4-0. 简单工厂模式【创建型】
[C#设计模式]总目录-共23种 [C#设计模式]简单工厂模式 前言 一.简单工厂模式定义 二.实例 三.进一步研究[违反开闭原则的解决方法] 四.简化简单工厂模式[将抽象产品类和工厂类合并] 五.简 ...
- 【设计模式】之简单工厂模式详解与应用(一)
开心一刻 [老公:老婆老婆,我刚去买了15块钱水果. 老婆:然后呢? 老公:给了老板100块,那二货找了我95.你说他二不二? 老公:我当时撒腿就跑啊. 老婆:水果呢? 老公:-忘拿了- 开心不,笑了 ...
最新文章
- Java学习总结:55(偶对象保存:Map接口)
- 编程难学?3点解答你的疑惑
- java uuid会重复吗_记一次订单号重复的事故,快看看你的 uuid 在并发下还正确吗?...
- “无效数字” ;java.lang.Integer cannot be cast to java.lang.String
- Windows服务的创建、安装、调试
- esclip直接快捷键构造函数_史上最全IntelliJ IDEA mac版快捷键文档
- spring + hibernate + 实体类 注解配置代码
- matlab 输入方程组,弱弱地问,如何输入以下方程组?
- 电子政务方向:We7.Cloud政府云门户
- CSS3贝塞尔曲线$$动画效果
- MySQL 8.0安装记录
- IN与EXISTS优化
- 20.TCP/IP 详解卷1 --- TCP 的成块数据流
- python unittest接口测试_Python+unittest 接口自动化测试
- 这文字的起始位置_如何用AE快速制造文字特效视频的效果?3分钟教你学会
- 关于Activity的四种启动模式详解
- 树莓派的蓝牙通讯(bluez、gattlib)
- 写博客的第二天——来个水题,17倍
- 我收集了如下的一些语录
- rman命令之crosscheck
热门文章
- beanutil 批量copy_Apache Commons Beanutils对象属性批量复制(pseudo-singleton)
- matlab 图像读取默认值,实验一MATLAB数字图像处理
- idea alt+insert快捷键中implement
- 016_泛型常见通配符
- 036_CSS导航条
- 011_CSS子元素选择器
- oracle 日期加3个月,三个日期函数(十分有用)!!!!!!!!
- 评价算法的性能从利用计算机资源角度,计算机专业数据结构课后练习题汇编
- html中加session,Html中如何获取session中的值(如登录后显示XX欢迎您!)
- php postgresql多条,PHP操作Postgresql封装类与应用完整实例