首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏技术杂货店

    设计模式11】-- 搞定组合模式

    设计模式系列: 设计模式【1】-- 单例模式到底几种写法? 设计模式【1.1】-- 你想如何破坏单例模式设计模式【1.2】-- 枚举式单例有那么好用么? 设计模式【1.3】-- 为什么饿汉式单例是线程安全的? 设计模式【2】-- 简单工厂模式了解一下? 设计模式【2.1】-- 简单工厂模式怎么演变成工厂方法模式设计模式【2.2】-- 工厂模式怎么演变成抽象工厂模式设计模式【3.1】-- 浅谈代理模式之静态、动态、cglib代理 设计模式【3.2】-- JDK动态代理源码分析有多香? 设计模式【3.3】-- CGLIB动态代理源码解读 设计模式【4】-- 建造者模式详解 设计模式【5】-- 原型模式 设计模式【6.1】-- 初探适配器模式 设计模式【6.2】-- 再聊聊适配器模式 设计模式 【7】-- 探索一下桥接模式 设计模式【8】-- 手工耿教我写装饰器模式 设计模式【9】-- 外观模式

    40610编辑于 2022-01-19
  • 来自专栏JuneBao

    设计模式 11】抽象工厂模式

    抽象工厂模式 抽象工厂模式( Abstract Factory),提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 当抽象工厂模式中每一个具体工厂类只创建一个产品对象,也就是只存在一个产品等级结构时,抽象工厂模式退化成工厂方法模式;当工厂方法模式中抽象工厂与具体工厂合并,提供一个统一的工厂来创建产品对象,并将创建对象的工厂方法设计为静态方法时 ,工厂方法模式退化成简单工厂模式。 另外,应用抽象工厂模式可以实现高内聚低耦合的设计目的,因此抽象工厂模式得到了广泛的应用。 当一个产品族中的多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族中的对象。 这对一些需要根据当前环境来决定其行为的软件系统来说,是一种非常实用的设计模式。 增加新的具体工厂和产品族很方便,无须修改已有系统,符合“开闭原则”。

    47030编辑于 2022-10-26
  • 来自专栏Lvshen的技术小屋

    设计模式11之装饰模式

    好的设计方式是不改变轮子的结构,动态的扩展功能。装饰模式就是这样的一种设计方式。 什么是装饰模式 “装饰模式(Decorator Pattern)是一种比较常见的模式,其定义如下:Attach additional responsibilities to an object dynamically 就增加功能来说,装饰模式相比生成子类更为灵活。) ” 是不是觉得跟代理模式有些像呢?对代理模式感兴趣的可以看看我的这篇文章: http://mp.weixin.qq.com/s? 关于装饰模式与代理模式 两者都是对功能增强。面试会经常问这两点区别。 我认为,装饰器模式关注于在一个对象上动态的添加方法,代理模式关注于控制对象的访问。 代理模式中史塔克和钢铁侠战甲已经绑死了,战甲也焊死了,小辣椒没法穿这套战甲了。 如图,左边为代理模式,右边为装饰模式

    30210编辑于 2022-05-05
  • 来自专栏爱敲代码的猫

    java设计模式(11)-组合模式

    这篇文章分享一下组合模式,具体类似于树形的数据结构,二叉树中有具体运用,有兴趣的可以翻阅资料。 组合模式: 组合模式允许你将对象组合成树形结构来表现”部分-整体“的层次结构,使得客户以一致的方式处理单个对象以及对象的组合。 组合模式实现的最关键的地方是——简单对象和复合对象必须实现相同的接口。 这就是组合模式能够将组合对象和简单对象进行一致处理的原因。 ; } } 优缺点: 优点: · 组合模式使得客户端代码可以一致地处理对象和对象容器,无需关系处理的单个对象,还是组合的对象容器。 将”客户代码与复杂的对象容器结构“解耦。 缺点: · 使得设计更加复杂。客户端需要花更多时间理清类之间的层次关系。(这个是几乎所有设计模式所面临的问题)。 使用场景: 将多个对象组合在一起进行操作,常用于表示树形结构中,例如二叉树等。

    49850发布于 2019-10-17
  • 来自专栏技术客栈

    Java设计模式11)组合模式

    前言 在Java开发中,设计模式是常用的一种编码方式,合理使用设计模式可以帮助开发人员更快地编写出高效、可靠和可维护的代码。 本期将撰写一个关于设计模式的系列文章,总共23种设计模式将以一篇一篇文章讲解,代码笔记已开源至:Gitee点击跳转。在上一篇《Java设计模式(10)代理模式》文章中,我们介绍了代理模式。 本文是这个系列的第十一篇章,我们将讲解一下组合模式的实现方式、应用场景以及它的用途。 组合模式 组合模式是一种结构型设计模式,它将对象组合成树形结构以表示“部分-整体”的层次结构。 组合模式使得客户端对单个对象和组合对象的使用具有一致性。 使用场景 树形结构:需要表示对象的部分-整体层次结构的系统。 文件系统:文件夹和文件的层次结构。 display 方法则用于遍历这个目录结构 测试使用 此处示例将目录和文件的创建封装成一个方法 System.out.println("------------------------------组合模式

    26410编辑于 2024-07-25
  • 来自专栏大猫的Java笔记

    11.设计模式--装饰者模式(Decorator模式)

    1.定义 装饰者模式是一种结构型模型,是动态的给对象增加职责,对于新增功能来说要比通过子类方式更加的灵活。 2.装饰者模式结构图 Info为抽象类,为信息类,主要扮演角色为Component,相当于蛋糕或基本信息,为了协调装饰物与被装饰物的一致性。 3.装饰者模式实现 Info为抽象类,为信息类,主要扮演角色为Component,同时提供两个方法,一个获取基本信息,另一个获取所有信息,包括附加信息。 参考文献《图解设计模式》 代码获取地址:https://gitee.com/bughong/design-pattern

    86710发布于 2021-11-11
  • 来自专栏java开发的那点事

    06-11-设计模式 职责链模式

    如果金额小于等于10000,由院长审批(5000<x<=10000) 3)如果金额小于等于30000,由副校长审批(10000<x<=30000) 4)如果金额超过30000以上,有校长审批(30000<x) 请设计程序完成采购审批项目 职责链模式 基本介绍 1)职责链模式(ChainofResponsibilityPattern),又叫责任链模式,为请求创建了一个接收者对象的链(简单示意图)。 这种模式对请求的发送者和接收者进行解耦。 2)职责链模式通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。 3)这种类型的设计模式属于行为型模式 原理类图 对原理类图的说明-即(职责链模式的角色及职责) 1)Handler:抽象的处理者,定义了一个处理请求的接口,同时含义另外Handler 2)ConcreteHandlerA interceptor.preHandler等等 在处理SpringMvc请求时,使用到职责链模式还使用到适配器模式 HandlerExecutionChain主要负责的是请求拦截器的执行和请求处理,但是他本身不处理请求

    36230编辑于 2022-05-28
  • 来自专栏Python机器学习算法说书人

    Python设计模式11):访问者模式

    在软件设计中,经常会遇到对系统中一个已经完成设计与代码编写的类的层次结构进行功能修改或增加新功能的情况,这就需要对该层次结构的某些类进行修改。 即将介绍的访问者模式(Visitor Pattern)可以用来解决类似的问题。访问者模式在处理数据结构较稳定,但是作用于其上的操作需要经常变化的问题时是非常有效的。 访问者模式是指作用于一个对象结构体上的元素的操作。访问者可以使用户在不改变该结构体中的类的基础上定义一个新的操作。 访问者模式的类图如图所示。 ? 这就是为什么访问者模式要针对每个被访问的子类都设计一个不同的接口的原因。 事实上,如果每个被访问的子类都有相同的接口,包括构造方法、其他方法、参数都一致,则访问者类只需要设计一个访问方法,在该方法中含有一个用于区别不同的被访问的子类的参数即可,例如可以使用被访问者基类作为参数类型

    97910发布于 2019-07-26
  • 来自专栏∑小熊猫的博客

    Java 设计模式系列(11) —— 桥接模式

    桥接模式 桥接模式的定义: 将抽象和实现解耦,是两者可以独立的变化 桥接模式的参与者: Abstraction 抽象化角色: 该角色抽象化的给出定义,并保存一个对实现化对象的引用。 Implementor 实现化角色:该角色给出实现化角色的接口,但不给出具体的实现 ConcreteImplementor 具体实现化角色:该角色对实现化角色接口中的方法进行具体的实现 桥接模式的简单示例 ConcreteImplementor(); Abstaraction abst = new RefinedAbstraction(impl); abst.doingSomething(); } } 桥接模式的优点和应用场景 桥接模式的优点: 抽象和实现分离 优秀的扩展能力 实现细节对客户透明 桥接模式的应用场景 不希望或不适用使用继承的场景 接口或抽象不稳定的场景 重用性要求较高的场景

    47320发布于 2021-01-14
  • 来自专栏学习笔记ol

    小谈设计模式11)—模板方法模式

    小谈设计模式11)—模板方法模式 专栏介绍 主要对目前市面上常见的23种设计模式进行逐一分析和总结,希望有兴趣的小伙伴们可以看一下,会持续更新的。 模板方法模式 这是一种行为型设计模式,用于定义算法的框架,将算法的具体实现延迟到子类中。 总结 模板方法模式是一种简单但非常实用的设计模式,它通过将算法的框架固定在抽象类中,将具体实现延迟到具体子类中,提供了一种灵活而可扩展的算法设计方案。

    32220编辑于 2023-10-11
  • 11.组合模式设计思想

    11.组合模式设计思想目录介绍01.组合模式基础1.1 组合模式由来1.2 组合模式定义1.3 组合模式场景1.4 组合模式思考1.5 解决的问题02.组合模式实现2.1 罗列一个场景2.2 组合结构2.3 编程进阶网https://yccoding.com/01.组合模式基础1.0 本博客AI摘要本文详细介绍了组合模式设计思想和实现方法,涵盖组合模式的基础概念、实现步骤、实例演示、实现方式、优缺点分析等内容 文章还探讨了透明式和安全式组合模式的区别,并提供了设计建议和适用场景。适合初学者和有一定经验的开发者阅读。 六大设计原则,23种设计模式设计模式案例,面向对象思想 设计模式 Java进阶 数据设计和原理,面向对象核心思想,IO,异常,线程和并发,JVM Android23种设计模式23种设计模式 & 描述 & 核心作用

    32210编辑于 2024-11-08
  • 来自专栏程序大视界

    11种常用的设计模式

    ,深挖表象之下隐藏着的细节往往才是灵魂所在,诸如:算法和数据结构、框架、设计模式等,设计模式是一个虚幻的抽象的概念,好比建造房子时的设计理念方案一样,一个软件系统扩展性、可维护性以及稳定健壮性如何,很大程度上取决于设计模式 如下,介绍我们在日常开发中常用的11设计模式,这些设计模式都是非常经典,翻开源代码和一些开源框架经常会发现它们的踪影。 修改Builder模式中Director类使之能诊断"断肢"断在哪个部件上,再修复这个部件。 11 — 观察者模式 基本概念:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。 13 — 总结 以上介绍的11设计模式在日常的开发工作中会经常使用到,也在很多开源框架如:Spring中就会看到很多的案例,灵活运用这些设计模式可以使我们的系统做到:易扩展、可维护性高、更稳健等。 ---- 参考文献:《大话设计模式

    73510编辑于 2022-12-19
  • 来自专栏EdisonTalk

    设计模式的征途—11.外观(Facade)模式

    外观模式(Facade) 学习难度:★☆☆☆☆ 使用频率:★★★★★ 一、文件加密模块设计 1.1 需求背景 M公司想要开发一个用于多个软件的文件加密模块,该模块可以对文件中的数据进行加密并将加密后的数据存储在一个新文件中 二、外观模式概述 2.1 外观模式简介   根据单一职责原则,在软件中将一个系统划分为若干个子系统有利于降低整个系统的复杂性,一个常见的设计目标就是使客户类与子系统之间的通信和相互依赖关系达到最小,而达到该目标的途径之一就是引入一个外观 三、重构文件加密模块 3.1 重构后的设计结构   为了降低系统耦合度,封装与多个子系统进行交互的代码,M公司开发人员使用外观模式来重构文件加密模块的设计,重构后的结构如下图所示: ? 引入抽象外观类之后的设计结构图如下图所示: ?   在新的设计中,客户端只针对抽象外观类AbstractEncryptFacade进行编程。 刘伟,《设计模式的艺术—软件开发人员内功修炼之道》 作者:周旭龙 出处:http://edisonchou.cnblogs.com 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,

    57920发布于 2018-08-21
  • 来自专栏知了一笑

    Java描述设计模式(11):观察者模式

    一、观察者模式 1、概念描述 观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式。 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,主题对象在状态发生变化时,会通知所有观察者对象。Redis和常用消息中间件的发布订阅模式,都是基于该原理实现。 3、源代码实现 基于消息推送模式 主题对象向观察者推送主题的消息,不管观察者是否需要。 ? /** * 观察者设计模式 */ public class C01_Observer { public static void main(String[] args) { / 推模式是假定主题对象知道观察者需要的数据,直接推送,使得观察者对象难以复用;而拉模式是主题对象不知道观察者具体需要什么数据,将把自身传递给观察者,按需要取值。

    50220发布于 2020-11-06
  • 来自专栏明志德到的IT笔记

    C#设计模式11——享元模式的写法

    什么是享元模式? 享元模式是一种结构型设计模式,目的是通过共享对象来尽量减少内存使用和对象数量。它通过将对象分为可共享的和不可共享的来实现这一目的。 2. 为什么要使用享元模式? 使用享元模式可以大大减少系统中对象的数量,从而减少了内存的使用。在对象数量较大,且需要相同状态的对象在内存中存在多个实例时,使用享元模式可以提高系统的性能和内存的使用效率。 3. 享元模式的核心思想是什么? 享元模式的核心思想是将对象分为内部状态和外部状态。内部状态是可以被共享的,而外部状态则需要在使用时进行传递。通过将内部状态共享,可以减少系统中相同状态对象的数量。 4. 享元模式有哪些应用场景? 享元模式常用于大规模创建相同或相似对象的场景,例如线程池、缓存池以及字符串池等。此外,它还可以用于减少系统中相同状态对象的数量,提高系统性能和内存使用效率。 6. 享元模式的优点和缺点是什么? 享元模式的优点包括减少对象数量,提高系统性能和内存使用效率,同时降低代码复杂度。缺点则是由于需要将对象分为内部状态和外部状态,因此可能需要增加代码的复杂性。

    30520编辑于 2023-10-21
  • 来自专栏AlbertYang的编程之路

    设计模式(11)-JavaScript中的注解之装饰器模式

    1 什么是装饰器模式? 装饰器模式模式动态地扩展了(装饰)一个对象的行为,同时又不改变其结构。在运行时添加新的行为的能力是由一个装饰器对象来完成的,它 "包裹 "了原始对象,用来提供额外的功能。 装饰器模式属于结构型模式。和适配器模式不同的是,适配器模式是原有的对象不能用了,而装饰器模式是原来的对象还能用,在不改变原有对象结构和功能的前提下,为对象添加新功能。 2 装饰器模式的主要参与者有哪些 ? 参与该模式的对象有: 客户端(Client) :维护一个对被装饰的组件的引用。 组件(Component) :添加了附加功能的对象。 官网文档:https://github.com/jayphelps/core-decorators.js 6 总结 装饰器模式是一种常见的结构型模式,在不改变类或对象本身结构的情况下,在程序的运行期间动态的为对象或类添加功能 与继承相比,装饰者模式是一种更轻便灵活的做法。

    1.1K31发布于 2020-09-08
  • 来自专栏C/C++基础

    设计模式11)——模板方法模式(Template Method Pattern,行为型)

    1.概述 使用设计模式可以提高代码的可复用性、可扩充性和可维护性。 缺点: 每个不同的实现都需要定义一个子类,这会导致类的个数的增加,设计也更加抽象,但是更加符合“单一职责原则”,使得类的内聚性得以提高。 4.小结 (1)模板方法模式定义了算法的步骤,将这些步骤的实现延迟到了子类。 (2)模板方法模式为我们提供了一种代码复用的重要技巧。 (3)模板方法模式的抽象类可以定义抽象方法、具体方法和钩子方法。 两者的目标都是在于解耦,依赖倒置原则更加注重如何在设计中避免依赖。 ---- 参考文献 [1]设计模式(九)模版方法模式 [2]Head First 设计模式(中文版):275-311 [3]设计模式读书笔记—–模板方法模式

    55421发布于 2018-08-03
  • 来自专栏CPP开发前沿

    【C++11】 改进我们的设计模式---观察者模式

    观察者模式(Observer Pattern)主要解决的是当对象间存在一对多关系时当一个对象被修改,会自动通知依赖它的其它对象。在设计模式中观察者模式属于行为型模式。 1 经典观察者模式 设计模式相关的书籍中,介绍观察者模式时大都用下面的图: 如上,上面的类图就是一个简单的观察者模式,上面的类说明如下: Subject:主题,通俗的理解为信息的发布者,提供了三个接口 2 改进后的观察者模式 为了解决经典观察者模式中的问题,可以使用C++11中提供的新的语言特性,如将消息通知接口进行参数化和使用std::function函数绑定解决类的继承问题,通过完美转发和可变参数模板消除接口接口变化的影响 经过改进后的观察模式有新增观察者时不需要继承基类。只要新增一个事件类型即可。 return k; } int m_iObersevre = 0; std::map<int,Func> m_mapOberserve; }; 如上面的代码所示,使用C++11

    1.4K31发布于 2021-11-16
  • 来自专栏C++小白

    大话设计模式11-单例模式-2020-9-24

    1.单例模式简介 单例模式:保证一个类只有一个初始化实例。可以通过将构造函数定义为私有的,并提供静态公有的初始化方法实现。 2.实例 c++实现了一个简单的单例模式懒汉版本,未考虑多线程冲突问题。 //11.单例模式 class Singleton { public: static Singleton *getInstance() { if (m_pSingleton==NULL) {

    19040编辑于 2022-02-22
  • 来自专栏CPP开发前沿

    【C++11】 改进我们的设计模式---访问者模式

    1 了解访问者模式 访问者模式的应用场景不多,它可以在不改变类成员的前提下定义作用于这些元素的新的操作,是一种数据元素和数据操作分离的设计模式。 2 访问者模式的使用场景 在《设计模式》书籍中,访问者模式的使用场景主要有以下几个方面: 需要对对象结构中的对象进行分别处理,又不想影响或者改变原有的对象结构。 在《设计模式》一书中,也强调了访问者模式中被访问者应该是一个稳定的继承结构,如果经常发生变更,就需要经常变更代码。如在上面的代码中,如果需要新增一个被访问对象,就需要修改虚基类Visitor的结构。 使用C++11的可变参数模板就可以帮助我们解决这一问题。 可变参数模版可以让接口支撑任意个参数,这一特性也有助于我们实现一个稳定的接口层,下面的代码就通过可变参数模板实现一个稳定的接口层。 和经典的访问者模式实现相比,接口层更加稳定。C++11实现的访问者模式,将之前接口层的变化大部分转移到了被访问者的修改,接口层只需要增加新的类型即可。

    62720发布于 2021-11-16
领券