
设计模式
文章平均质量分 86
bird_tp
不管是菜鸟还是笨鸟,反正先飞总是没错
展开
-
设计模式之访问者模式
1、问题引入 今天我们看的是访问者模式【Visitor Pattern】,我们理解访问者模式这个名称可能会有利于我们理解其核心代码块。我们看这么个例子:我去朋友家做客,那么朋友属于主人,我则属于访问者。这时刚好朋友在炒菜,却没得酱油了。如果朋友下去买酱油将会很麻烦而且会影响炒菜。这时就到我这个访问者出马了。一溜烟的出去打着酱油就回来了。简单理解的来说就是,访问者在主人原来的基础上帮助主人去完成主人不方便或者完不成的东西。 访问者模式介绍 一、来由 在软件系统开发中,我们经常会遇见一些层次结.原创 2020-11-27 09:37:24 · 172 阅读 · 0 评论 -
设计模式之模板模式
一、定义 模板模式又名模板方法模式,父类定义一个操作中算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤。 例如,一个互联网产品开发过程中,有需求调研,原型输出,代码开发,测试,结项怎么几部分,所以我们可以将这几大步骤放到父类中定义,但是具体如何调研,如何开发,测试则是可以放到子类实现。 二、优缺点 优点 1、封装不变部分,扩展可变部分。 2、提取公共代码,便于维护。 3、行为由父类控制,子类实现。 缺点 每一个不同的实现都需要一个子类来.原创 2020-11-25 16:01:51 · 261 阅读 · 2 评论 -
设计模式之状态模式
一、模式引入 生活中对象的状态概念无处不在,例如你拨打一个人手机的时候,有停机,欠费,关机,正在通话中,接通这几种状态,对于不停的状态你肯定有不同的处理方式,例如停机了,你可能以后永远不再拨打这个号码了,欠费和关机可能过一段时间再打,正在通话中可能过个几分钟就会打过去。 又如公交车有开门,关门,运行,停车等状态,只有开门才能上车和下车,关门和运行状态的就坐好,停车了就下车 在软件开发过程中,应用程序中的部分对象可能会根据不同的状态做出不同的行为。 二、定义 当一个对象的内在状态改变时允许改变其行为原创 2020-11-25 11:01:57 · 179 阅读 · 0 评论 -
java设计模式之策略模式
一、问题引入 在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能。 而我们通常编程的时候,将这些查找算法封装在一个统一的方法中,通过if…else…或者case等条件判断语句来进行选择。但是这样就引出一个问题,假如我需要 要增加一种新的算法,需要修改封装算法类的源代码;更换算法,也需要修改客户端调用代码。有什么方法可以实现新增的,更换的时候不对原有代码做改动呢。 如何让算法和对象分开来,使得算法可以独立于使用...原创 2020-11-24 11:31:02 · 198 阅读 · 0 评论 -
java设计模式之空对象模式
一、问题引入 在我们日常的编码过程中,我们经常会写出类似如下代码 Object object = map.get(index); if(object != null){ //调用test方法 object.test() } 从上面的代码我们可以看到,我们获取到一个object对象时,需要先对它进行空判断,然后在对object对象进行操作,如果不尽兴判空操作,直接对object对象,有可能会报空指针异常。 二、问题解决 为了解决上面的问题,假如我们客户端不想做.原创 2020-11-21 10:14:15 · 244 阅读 · 0 评论 -
java设计模式之观察者模式
一、定义 定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。可以看到中介模式主要是用来封装交互的。 二、主要解决 对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理。 也就是将网状结构改为星状结构 三、模式举例 qq群,五八找房平台等房屋中介 四、优缺点 1、优点 降低了对象之间的耦合性,使得对象易于独立地被复用。 将对象间的...原创 2020-11-20 10:51:28 · 187 阅读 · 0 评论 -
设计模式之迭代器模式
一、定义 提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。 二、主要解决 遍历整合对象 三、应用实例 JAVA 中的 iterator。 四、组成结构 迭代器(Iterator):迭代器定义访问和遍历元素的接口。 具体迭代器(ConcreteIterator):具体迭代器实现迭代器接口,对该聚合遍历时跟踪当前位置。 抽象集合(Aggregate):聚合定义创建相应迭代器iterator()方法对象的接口。类比容器类接口Collection,List,Set 具体集合原创 2020-11-18 15:17:38 · 175 阅读 · 0 评论 -
设计模式之命令模式
一、定义 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志。以及支持可撤销的操作。简单说就是将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通。 二、主要解决 在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。 三、包含角色 Command(抽象命令类):抽象出命令对象,可以根据不同的命令类型。写原创 2020-11-17 16:54:00 · 202 阅读 · 2 评论 -
设计模式之责任链模式
一、概念 责任链,顾名思义,就是用来处理相关事务责任的一条执行链,执行链上有多个节点,每个节点都有机会(条件匹配)处理请求事务,如果某个节点处理完了就可以根据实际业务需求传递给下一个节点继续处理或者返回处理完毕。 简单的说就是一个请求有多个对象来处理,这些对象是一条链,但具体由哪个对象来处理,根据条件判断来确定,如果不能处理会传递给该链中的下一个对象,直到有对象处理它为止。 二、使用场景 有多个对象可以处理同一个请求,具体哪个对象处理该请求待运行时刻再确定。 在不明确指定接受者的情况下,向..原创 2020-11-16 16:12:31 · 249 阅读 · 0 评论 -
设计模式之代理模式
一、定义 在代理模式(Proxy Pattern)中,创建一个类代表另一个类的功能,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能. 二、意图 为其他对象提供一种代理以控制对这个对象的访问。侧重点为控制 三、优缺点 优点:1、职责清晰。 2、高扩展性。 3、智能化。 缺点:1、由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。 2、实现代理模式需要额外..原创 2020-11-06 17:51:02 · 252 阅读 · 0 评论 -
设计模式之享元模式,组合模式,过滤器模式,原型模式,解释器模式,中介者模式
一、享元模式 1、定义 享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。 2、解决问题 在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。 3、应用实例 JAVA 中的 String,如果有则返回,如果没有则创建一个字符串保存在字符串缓存池里面。 数据库的数据池。 4、优点原创 2020-11-06 15:18:36 · 252 阅读 · 0 评论 -
设计模式之外观模式
一、什么是外观模式 你家里有各种电器的开关,照明灯开关,家电开关什么的,你平常用用哪个电器就去打开哪个电器的开关。但是你家里也有一个电源总开关,可以控制这些家电的开关使用,这个总共开关便可以理解为这些家电系统的外观模式设计。 二、定义 外观模式是一种使用频率非常高的结构型设计模式,它通过引入一个外观角色来简化客户端与子系统之间的交互,为复杂的子系统调用提供一个统一的入口,降低子系统与客户端的耦合度,且客户端调用非常方便。 外观模式的目的不是给予子系统添加新的功能接口,而是为了让外部减少与子系统内多个原创 2020-11-06 13:59:18 · 231 阅读 · 4 评论 -
设计模式之装饰器模式
一、定义 装饰器模式属于结构型模式,在不改变原有对象的基础上将功能附加到对象,相比继承可以更加灵活地扩展原有对象的功能。简单来说创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能 二、角色 Component,抽象构件 Component是一个接口或者抽象类,是定义我们最核心的对象,也可以说是最原始的对象 ConcreteComponent,具体构件,或者基础构件 ConcreteComponent是最核心、最原始、最基本的接口或抽象类Comp..原创 2020-11-05 18:16:37 · 225 阅读 · 1 评论 -
设计模式之桥接模式
一、定义 桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。 二、核心 桥接模式 的核心在于 解耦抽象和实现。 注:此处的 抽象 并不是指 抽象类 或 接口 这种高层概念,实现 也不是 继承 或 接口实现 。抽象 与 实现 其实指的是两种独立变化的维度。其中,抽象 包含 实现,因此,一个 抽象 类的变化可能涉及到多种维度的变化导致的。 三、优缺点 1、优点 抽象和实现分离:这是 桥接原创 2020-11-04 16:11:43 · 289 阅读 · 0 评论 -
设计模式之适配器模式
一、定义 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。 例如我们在给手机充电时,连接到插座上的那个,它的学名就称之为”适配器”。我们国家提供的是220v的电,我们手机充电需要的却只需要5v 二、角色 目标角色(target):这是客户锁期待的接口。目标可以是具体的或抽象的类,也可以是接口 适配者角色(adaptee):已有接口,但是和客户器期待的接口不兼容,需要适配的类或适配者类 适配器角色(adapter)...原创 2020-11-03 14:53:17 · 218 阅读 · 0 评论 -
设计模式之建造者模式
一、概述 在软件开发过程中有时需要创建一个复杂的对象,这个复杂对象通常由多个子部件按一定的步骤组合而成。例如,计算机是由 CPU、主板、内存、硬盘、显卡、机箱、显示器、键盘、鼠标等部件组装而成的,采购员不可能自己去组装计算机,而是将计算机的配置要求告诉计算机销售公司,计算机销售公司安排技术人员去组装计算机,然后再交给要买计算机的采购员。 一个产品都是由多个部件构成的,各个部件可以灵活选择,但其创建步骤都大同小异。这类产品的创建无法用前面介绍的工厂模式描述,只有建造者模式可以很好地描述该类产...原创 2020-11-02 15:10:56 · 359 阅读 · 1 评论 -
设计模式之工厂模式
一、什么是工厂模式 工厂模式是用来创建对象的一种最常用的设计模式。是用工厂方法代替new操作的一种模式。我们不暴露创建对象的具体逻辑,而是将逻辑封装在一个函数中,那么这个函数就可以被视为一个工厂。 二、工厂模式的分类 简单工厂模式,工厂方法模式,抽象方法模式 三、工厂方法模式 1、描述 提供一个用于创建对象的接口(工厂接口),让其实现类(工厂实现类)决定实例化哪一个类(产品类),并且由该实现类创建对应类的实例 2、模式作用 可以一定程度上解耦,消费者和产品实现类隔离开,只依赖产品接口..原创 2020-10-23 16:05:02 · 1455 阅读 · 1 评论