设计模式
星空是梦想
广州程序员一枚~
展开
-
策略模式
一、什么是策略模式 策略这个词应该怎么理解,打个比方说,我们出门的时候会选择不同的出行方式,比如骑自行车、坐公交、坐火车、坐飞机、坐火箭等等,这些出行方式,每一种都是一个策略。 再比如我们去逛商场,商场现在正在搞活动,有打折的、有满减的、有返利的等等,其实不管商场如何进行促销,说到底都是一些算法,这些算法本身只是一种策略,并且这些算法是随时都可能互相替换的,比如针对同一件商品,今天打八折、...原创 2019-11-16 22:46:47 · 130 阅读 · 0 评论 -
状态模式
状态模式的结构 用一句话来表述,状态模式把所研究的对象的行为包装在不同的状态对象里,每一个状态对象都属于一个抽象状态类的一个子类。状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。状态模式所涉及到的角色有:环境(Context)角色,也成上下文:定义客户端所感兴趣的接口,并且保留一个具体状态类的实例。这个具体状态类的实例给出此环境对象的现有状态。抽象状态(St...原创 2019-11-16 22:20:20 · 156 阅读 · 0 评论 -
观察者模式
从案例入手:以下是之前做的“产品详情页”的长截图,这里讲解一下这个页面与“观察者模式”的关系:在活动季,底部的“开始预订按钮”会变成“秒杀按钮”(所谓秒杀按钮,就是一个显示成灰色不可点击,并且一直处于倒计时状态的按钮,直到到达秒杀时间,比如0点整,秒杀按钮才由灰色变为橘黄色,并且可以点击), 当秒杀时间到时,不光底部的“秒杀按钮”变为“开始预订按钮”,可选班期的几个按钮也从灰色不可点击状态,变为...原创 2019-11-16 17:21:30 · 123 阅读 · 0 评论 -
中介者模式
中介者模式(Mediator Pattern):用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式的本质:解耦多个同事对象之间的交互关系。每个对象都持有中介者对象的引用,只跟中介者对象打交道。我们通过中介者对象统一管理这些交互关系。应用思路:如果一个系统中,对象之间的联系呈网状结构,对象之间存在大量的多...原创 2019-11-16 16:17:11 · 176 阅读 · 0 评论 -
命令模式
介绍命令模式是一种行为型设计模式。在命令模式中,所有的请求都会被包装成为一个对象。参考了一下其他关于命令模式的文章,其中有谈到说是可以用不同的请求对客户进行参数化。我对这句话的理解是,因为将请求封装成为对象,所以客户的所有操作,其实就是多个命令类的对象而已,即参数化了。命令模式的最大的特点就是将请求的调用者与请求的最终执行者进行了解耦。调用者需要关心的仅仅是请求对象是否被执行了,对于请求...原创 2019-11-16 15:30:13 · 174 阅读 · 0 评论 -
代理模式
什么是代理模式? 代理模式的定义:代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。 举个例子来说明:假如说我现在想买一辆二手车,虽然我可以自己去找车源,做质量检测等一系列的车辆过户流程,但是这确实太浪费我得时间和精力了。我只是想买一辆车而已为什么我还要额外做这么多事呢?于是我就通过中介公司来买车,他们来给我找车源,帮我办理车...原创 2019-11-16 13:01:27 · 153 阅读 · 0 评论 -
享元模式
一、什么是享元模式说到享元模式,第一个想到的应该就是池技术了,String常量池、数据库连接池、缓冲池等等都是享元模式的应用,所以说享元模式是池技术的重要实现方式。比如我们每次创建字符串对象时,都需要创建一个新的字符串对象的话,内存开销会很大,所以如果第一次创建了字符串对象“adam“,下次再创建相同的字符串”adam“时,只是把它的引用指向”adam“,这样就实现了”adam“字符串再内存中...原创 2019-11-16 12:32:55 · 162 阅读 · 0 评论 -
外观模式
一、前言 外观模式是一种非常简单的模式,简单到我们经常都会使用,比如对于类A和B,如果两者需要交互,经过一定的处理过程才能实现某一个具体的功能,那么我们可以将这个处理的过程定义为一个新的类,然后在这个类里面将类A和B的处理步骤整合在一起,对于外界我们只暴露新的类中的这个接口,这样代码的复用性就非常的好了,可以将这些代码作为组件去让其他程序去使用,这在我们的开发之中是非常常见的。甚至我们可以将抽...原创 2019-11-16 00:55:56 · 231 阅读 · 0 评论 -
装饰者模式
装饰者模式是为了给已有的对象增加一些逻辑,但是不改变已有对象的代码,下面是类图:从上图可以看出,装饰者 Decorator与需要被装饰的对象 ContcreteComponent 实现了相同的接口。具体怎么装饰则由 Decorator 的子类 ConcreteDecorator 决定。Java 中使用装饰者模式的一个典型的例子是 I/O 对象的创建,比如创建一个 BufferedInputS...原创 2019-11-16 00:27:18 · 170 阅读 · 0 评论 -
桥接模式
模式动机设想如果要绘制矩形、圆形、椭圆、正方形,我们至少需要4个形状类,但是如果绘制的图形需要具有不同的颜色,如红色、绿色、蓝色等,此时至少有如下两种设计方案:第一种设计方案是为每一种形状都提供一套各种颜色的版本。第二种设计方案是根据实际需要对形状和颜色进行组合。对于有两个变化维度(即两个变化的原因)的系统,采用方案二来进行设计系统中类的个数更少,且系统扩展更为方便。设计方案二即是桥...原创 2019-11-15 23:30:04 · 282 阅读 · 0 评论 -
适配器模式
适配器模式适配器模式(Adapter Pattern):将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。在适配器模式中,我们通过增加一个新的适配器类来解决接口不兼容的问题,使得原本没有任何关系的类可以协同工作。根据适配器类与适配者类的关系不同,适配器模式可分为对象适配器和类适...原创 2019-11-15 22:34:54 · 228 阅读 · 0 评论 -
单例模式
1. 模式动机对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统;一个系统只能有一个计时工具或ID(序号)生成器。如何保证一个类只有一个实例并且这个实例易于被访问呢?定义一个全局变量可以确保对象随时都可以被访问,但不能防止我们实例化多个对象。一个更好的解决办法是让类自身负责保存它的唯一实例。这...原创 2019-11-15 13:41:55 · 189 阅读 · 0 评论 -
建造者模式
1. 模式动机无论是在现实世界中还是在软件系统中,都存在一些复杂的对象,它们拥有多个组成部分,如汽车,它包括车轮、方向盘、发送机等各种部件。而对于大多数用户而言,无须知道这些部件的装配细节,也几乎不会使用单独某个部件,而是使用一辆完整的汽车,可以通过建造者模式对其进行设计与描述,建造者模式可以将部件和其组装过程分开,一步一步创建一个复杂的对象。用户只需要指定复杂对象的类型就可以得到该对象,而无须...原创 2019-11-15 13:38:10 · 137 阅读 · 0 评论 -
抽象工厂模式
1. 模式动机在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方法。但是有时候我们需要一个工厂可以提供多个产品对象,而不是单一的产品对象。为了更清晰地理解工厂方法模式,需要先引入两个概念:产品等级结构 :产品等级结构即产品的继承结构,如一个抽象类是电视机,其子类有海尔电视机、海...原创 2019-11-13 00:47:01 · 226 阅读 · 0 评论 -
工厂方法模式
工厂方法模式在jdk中的应用改为:1、https://www.hollischuang.com/archives/14082、jdbc连接(工厂方法模式扩展)产品对象的重复使用:工厂对象将已经创建过的产品保存到一个集合(如数组、List等)中,然后根据客户对产品的请求,对集合进行查询。如果有满足要求的产品对象,就直接将该产品返回客户端;如果集合中没有这样的产品对象,那么就创建一个新的满足要求...原创 2019-11-13 00:34:43 · 678 阅读 · 0 评论 -
简单工厂模式
文章目录1. 模式动机2. 模式定义3. 模式结构4. 时序图5. 代码分析6. 模式分析7. 实例8. 简单工厂模式的优点9. 简单工厂模式的缺点10. 适用环境11. 模式应用12. 总结1. 模式动机考虑一个简单的软件应用场景,一个软件系统可以提供多个外观不同的按钮(如圆形按钮、矩形按钮、菱形按钮等), 这些按钮都源自同一个基类,不过在继承基类后不同的子类修改了部分属性从而使得它们可以呈...原创 2019-11-12 14:29:22 · 520 阅读 · 0 评论 -
设计模式分类
创建型模式简单工厂模式工厂方法模式抽象工厂模式建造者模式单例模式结构型模式适配器模式桥接模式装饰模式外观模式享元模式代理模式行为型模式命令模式中介者模式观察者模式状态模式策略模式...原创 2019-11-12 14:17:42 · 173 阅读 · 0 评论 -
责任链模式
1、应用场景:打牌轮流出牌;接力赛跑;奖学金审批;公文审批2、示例:请假流程:(1)、请假请求(请假请求信息)(2)、领导接口(相应属性,请假条处理接口)(3)、领导实例3、实现:(1)、请假请求类:(2)、领导抽象类:提供相应属性、接口(3)、具体领导实现类:实现核心业务方法handleRequest()...原创 2019-05-14 15:37:12 · 185 阅读 · 0 评论 -
代理模式(动态代理模式)
1、组成:实现 InvocationHandler接口,代理对象(Star)、代理对象抽象接口2、原理:(1)、代理对象抽象接口(interface) 需要提供所有方法的接口;(2)、代理对象(Star)需要 实现 代理对象抽象接口(interface), 但只需要实现核心业务逻辑;(3)、实现 InvocationHandler接口,通过构造器指定 抽象接口(interface) ,...原创 2019-05-14 15:40:11 · 204 阅读 · 0 评论 -
工厂模式
1、核心本质:实例化对象,用工厂方法代替new操作; 将类创建者和调用者分离2、分类:3、应用场景:4、简单工厂模式:创建工厂:间接创建、调用对象:5、工厂方法模式:优点:比简单工厂扩展性高,要增加汽车类型,只需再添加汽车和汽车工厂实现类;缺点:类的冗余和扩展奔驰类(实现汽车接口):奔驰工厂(实现汽车工厂接口):创建一辆奔驰:new一个奔驰工厂,调用里面的c...原创 2019-05-14 15:42:37 · 178 阅读 · 0 评论 -
建造者模式
1、逻辑图(宇宙飞船)2、使用场景:当建造的对象有多个组件组成,且组件之间的组装有顺序的时候,可以使用建造者模式3、使用大纲:AirShip(产品实体类)、builder(构造者)、directer(组装者) AirShip:包含产品每个零件(属性)builder:负责构造各个零件的方法(属性)directer:负责builder方法,创建每个组件(属性),并组装main方法:...原创 2019-05-14 15:44:38 · 303 阅读 · 0 评论 -
桥接模式
1、应用场景:当类与类之间存在多维度变化场景时,应用桥接模式可以避免使用继承带来的问题。2、原理:为每一个唯度建立一个公用接口,然后为接口之间通过调用方式建立联系,示例(电脑):(1)、按笔记本、台式机等分类: 每个实现类调用品牌类:Brand并调用Brand方法sale()(2)、按品牌分类:...原创 2019-05-14 15:47:09 · 182 阅读 · 0 评论 -
单例模式
1、核心作用:保证一个类只有一个实例,并且提供一个访问该实例的全局访问点单例模式类图关系:2、实现方式:3、如何选择?4、饿汉式在类初始化的同时,立即加载一个静态对象; 提供一个静态方法提供该对象;私有构造器保证构造器不被其他类使用;5、懒汉式提供私有构造器,保证不被其他类构造; 在第一次被使用时才被加载(延时加载);6、双重检查锁式(会出错,不建议使用)将锁放进if语...原创 2019-05-14 15:19:02 · 114 阅读 · 0 评论