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

    Java设计模式10)代理模式

    前言 在软件开发的世界里,设计模式如同一本精妙的编码诗集,已经成为一种标准的编程实践。在Java编程中,设计模式很重要。 是软件开发中广泛应用的一种编程方法,它可以帮助开发人员更快地编写出高效、可靠和可维护的代码。 本人将制作一个关于Java设计模式的系列文章,总共23种设计模式将以一篇一篇文章讲解,代码笔记已开源:Gitee点击跳转。在上一篇《Java设计模式(9)享元模式》文章中,我们介绍了享元模式。 本文是这个系列的第十篇章,我们将讲解一下代理模式的实现方式、应用场景以及它的用途。 代理模式 在代理模式中,一个类代表另一个类的功能,这种类型的设计模式属于结构型模式。 代理模式又有两种主要形式: 静态代理:在编译时就已经确定了代理类和被代理类之间的关系,通常需要为每个被代理类都编写一个对应的代理类,并实现相同的接口。

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

    10.设计模式--组合模式(Composite模式)

    1.定义 组合模式是一种结构型模型,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。 这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。 上回说到刘备被设计入赘江东后,通过诸葛孔明的锦囊妙计成功化险为夷。回到荆州后刘备一心想匡扶汉室,于是准备继续招兵买马。 如此看来这种层次结构不就是我们说的组合模式要实现的内容吗? 相似的对象当成单一对象,部门和人员都具备组织树的特性即部门下可能是人员也有可能存在子部门信息。同时都具备基础信息,比如名字等。 2.组合模式实现 OrganizationalStructure抽象类表示组织结构,其中由于部门和人员信息都属于组织结构具有相似,所以部门和人员信息都是他的子类。 参考文献《图解设计模式》 代码获取地址:https://gitee.com/bughong/design-pattern

    56420发布于 2021-11-11
  • 来自专栏云原生技术社区

    Istio ambient 模式中使用 eBPF 进行流量重定向

    作者:丁少君 - Intel,李纯 - Intel 在 Istio ambient[1] 模式中,运行在每个 Kubernetes 工作节点上的 istio-cni 组件负责将应用程序流量重定向到该节点上的零信任隧道代理 现在我们增加了基于 eBPF 的流量重定向方法的支持。 为何采用 eBPF 虽然在实现 Istio ambient 模式重定向时需要考虑性能问题,但可编程性的考量也非常重要,以满足转发规则多样化和可定制化的要求。 istio-cni 会监听 Pod 事件,并在 Pod 加入或离开 Istio ambient 模式时将 eBPF 程序加载/卸载到 Pod 相关的网络接口上。 使用 eBPF 程序替代 iptables 模式消除了对于 Geneve 的封包/解包的需求,并使流量的转发可以在内核空间中自定义。这既提高了性能,又提供了额外的灵活性。

    96910编辑于 2023-09-07
  • 来自专栏三流程序员的挣扎

    2022-10-10-享元模式

    解释器模式第一遍没有读懂,看到后面说实际项目中很少用到,因为它会引起效率、性能以及维护等问题,会直接用已有的成熟的工具。 又看了一遍有点明白了,有点类似写算法题遇到的情况,又有点编译原理里面的味道。 这《设计模式之禅》虽然没有技术过期的问题,但买了纸书,现在还是在看电子版的,在公司也不适合看纸书,而且属于看完记录完也不想再看的书。 以后凡是不需要阅读多遍的书,都不要花钱去买纸书。 享元模式 池中共享对象,减少对象创建,减小 OOM 机率。 比如 Android 从 xml 构建 View 时的构造器。Map 保存对象,有就拿出来用,没有再创建存到 Map 中去。 虽然可以使用享元模式可以实现对象池,但是这两者还是有比较大的差异,对象池着重在对象的复用上,池中的每个对象是可替换的,从同一个池中获得 A对象和 B 对象对客户端来说是完全相同的,它主要解决复用,而享元模式在主要解决的对象的共享问题

    27310编辑于 2022-10-25
  • 来自专栏知了一笑

    Java描述设计模式(10):组合模式

    组合模式属于对象的结构模式,有时又叫做“部分——整体”模式。 组合模式将对象组织到树结构中,可以用来描述整体与部分的关系。组合模式可以使客户端将单纯元素与复合元素同等看待。 二、组合模式-安全式 1、基础概念 安全式的组合模式要求管理聚集的方法只出现在树枝构件类中,而不出现在树叶构件类中。 在安全式的组合模式里,构件角色并不定义出管理子对象的方法,这一定义由树枝构件对象给出。 树叶构件(Leaf)角色 树叶对象是没有下级子对象的对象,定义出参加组合的原始对象的行为。 -透明式 1、概念图解 与安全式的组合模式不同的是,透明式的组合模式要求所有的具体构件类,不论树枝构件还是树叶构件,均符合一个固定接口。

    64910发布于 2019-09-03
  • 来自专栏JuneBao

    【设计模式 10】观察者模式

    观察者模式又叫发布订阅模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时会通知所有观察者对象,使它们能够自动更新自己。 观察者模式 观察者模式又叫发布订阅模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时会通知所有观察者对象,使它们能够自动更新自己。 参考: design-patterns.readthedocs |观察者模式 refactoringguru | 观察者模式 博客园 | 简说设计模式——观察者模式 CSDN | 设计模式 ( 十五 ) 需要在系统中创建一个触发链,A对象的行为将影响B对象,B对象的行为将影响C对象……,可以使用观察者模式创建一种链式触发机制 实例: MVC模式是一种架构模式,它包含三个角色:模型(Model),视图( 观察者模式可以用来实现MVC模式,观察者模式中的观察目标就是MVC模式中的模型(Model),而观察者就是MVC中的视图(View),控制器(Controller)充当两者之间的中介者(Mediator

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

    设计模式10之责任链模式

    链式结构 责任链模式主要由3个要素组成: 抽象处理者(Handler)角色:定义一个处理请求的接口,包含抽象处理方法和一个后继连接。 关于对责任链模式的看法 那么我们什么时候合适使用责任链模式呢? 一般如果由多个对象处理一个请求,需要使用哪对象由实际调用的时候确定。这种场景我们就可以使用调用者模式。 如果你开发过管理系统,是否有过流程审批功能的开发。大家可以思考下这方面能不能使用责任链模式呢。 还有在订单系统中,订单状态的处理是否可以使用此种设计模式更为优秀呢。 所以使用责任链模式需要控制链路长度。比如在Handler中设置最大节点数量。如果节点数量超出这个最大数量,就不允许该链路的创立。 责任链模式可以很好的扩展节点。这里有一个场景,比如开发一个报销审批系统,最开始你只是开发了只要项目经理报销就可以了。但是实际情况是报销金额太大,项目经理做不了主了,需要部门经理来报销了。

    41930编辑于 2022-05-05
  • 来自专栏java开发的那点事

    06-10-设计模式 策略模式

    策略模式 基本介绍 1)策略模式(StrategyPattern)中,定义算法族(策略组),分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户 2)这算法体现了几个设计原则, 说明:从上图可以看到,客户context有成员变量strategy或者其他的策略接口,至于需要使用到哪个策略,我们可以在构造器中指定 策略模式优化IF else 类图 使用策略模式+工厂+模板方法 解决多分类查询 本来我想在其中加入状态模式, 用于控制是根据一些参数, 来决定查询DB还是查询缓存, 但是后来应为一些场景是缓存实现不了的, 只能查DB了, 但是一些公用数据还是查询缓存的, 后续如果需要扩展其他查询, PressureVo> addIsOnline(List<Pressure> records, List<String> deptCodes) { // 业务逻辑 } } 策略模式的注意事项和细节 1)策略模式的关键是:分析项目中变化部分与不变部分 2)策略模式的核心思想是:多用组合/聚合少用继承;用行为类组合,而不是行为的继承。

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

    Python设计模式10):迭代器模式

    本节介绍如何给复杂的聚合型数据结构提供一个遍历方法的设计模式——迭代器模式(Iterator Pattern)。 迭代器模式的关键思想是将对列表的访问和便利从列表对象中分离出来,放入一个独立的迭代器对象中。迭代器类定义了访问该列表元素的接口。 迭代器模式能够提供一种方法按照顺序访问一个聚合对象中的所有元素,而又不需要暴露该对象的内部表示。 迭代器模式的结构图如图所示。 ? 迭代器模式的各组成部分及含义说明如下。 迭代器模式的优点如下。 迭代器模式支持以不同的方式遍历同一聚合,复杂的聚合可以用多种方式进行遍历。例如二叉树遍历方法有 4 种:先序遍历、中序遍历、后序遍历和层次遍历。 class ConcreteAggregate(Aggregate): def __init__(self): self.data_structure = list(range(10

    92210发布于 2019-07-26
  • 来自专栏前端

    【Vue】路由介绍 && vue-router使用 && 重定向 && 路由模式

    路由的介绍生活中的路由:设备和 ip 的映射关系Vue中的路由:路径和组件的映射关系单页面应用程序,之所以开发效率高,性能好,用户体验好,最大的原因就是:页面按需更新比如当点击【发现音乐】和【关注】时, 更多配置一、重定向1. 问题在网页打开时,url 默认是 / 路径,未匹配到组件时,会出现空白内容,如下所示:2. 解决方案重定向:匹配 / 后,强制跳转到其它页面,比如跳转到 /find 路径,避免页面空白。3. 语法在创建路由 createRouter() 时候添加对 / 的重定向路径,如下所示:const router = createRouter({ ... history路由(开发常用),例如:http://localhost:8080/find(缺点是刷新或直接访问时会请求服务器,需要后端配置 history fallback)2.

    32010编辑于 2026-02-02
  • 来自专栏云前端

    前端开发中的几种资源重定向方法

    在前端开发,尤其是开发SPA(单页应用)的时候,一个常见的需求是在调试和测试环境下搭建服务器实现资源的重定向。 简单梳理一下就会发现,我们林林总总的新老项目中,根据前端开发阶段技术选型的不同,面对同样的重定向问题,会有几种不同的解决方法,本文就来简单梳理一下: 1. -d #根据规则分别重定向前后端路由 RewriteRule ! > 3. webpack dev server + express 红红火火恍恍惚惚的流行开发工具webpack,就不须多说了,直接看关键配置: historyApiFallback的意思是当路径匹配的文件不存在时不出现 配置的ajax响应),从而实现ajax请求重定向 该组合一般用于开发时调试 //webpack.config.js devServer: { port: serverConfig.port,

    3.1K10发布于 2020-06-15
  • 来自专栏技术杂货店

    设计模式10】-- 顺便看看享元模式

    设计模式系列:http://aphysia.cn/categories/designpattern 开局还是那种图,各位客官往下看... 享元模式是什么? 享元模式(FlyWeight),是结构型模式的一种,主要是为了减少创建对象的数量,减少内存占用以及提高性能。 :在单纯享元模式中,所有的具体享元类都是可以共享的,不存在非共享具体享元类。 复合享元模式:将一些单纯享元对象使用组合模式加以组合,还可以形成复合享元对象,这样的复合享元对象本身不能共享,但是它们可以分解成单纯享元对象,而后者则可以共享 这里我们说的是单纯享元模式,享元模式一般会有几种对象 [20211227232719.gif] 总结 优点:如果有很多相似或者重复的对象,使用享元模式,可以节省空间 缺点:如果重用很多,不同地方还做了特殊化处理,代码复杂度增加 设计模式其实是在软件工程的不断摸索中

    37220编辑于 2022-01-09
  • 来自专栏∑小熊猫的博客

    Java 设计模式系列(10) —— 装饰器模式

    装饰器模式 装饰器模式的定义: 动态的给一个对象添加额外的职责,就功能来说,装饰模式相比子类更为灵活 装饰器模式的四个角色: Componment 抽象构建角色:该角色用于规范需要装饰的对象 ConcreateComponment 该角色是需要被装饰地 对象 Decorator: 装饰角色:一般是一个抽象类,该角色持有私有的一个抽象构件对象 ConcreateDecorator: 具体装饰角色;感觉主要负责对构件对象进行装饰 装饰器模式的简单示例 componment); componment = new ConcreateDecorator(componment); componment.doingProcedureA(); } } 装饰器模式的优点和使用范围 装饰器模式的优点: 装饰类和被装饰类可以独立发展,而不会相互耦合 装饰模式是继承关系的一种替代方案 装饰模式可以动态的扩展一个实现类的功能 装饰器模式的应用场景: 用于扩展一个类的功能,或者给一个类添加附加职责 动态的给一个对象天机功能,这些功能可以被动态的撤销 需要位一批的兄弟类进行改装或加装功能 装饰器模式的缺点: 多层的装饰较为复杂

    46410发布于 2021-01-13
  • 来自专栏CSDN搜“看,未来”

    我用过的设计模式10)-- 命令模式

    @toc 命令模式 咱也没读过什么书,看网上的命令模式讲的那叫个花里胡哨,看来看去,我接收到的讯息如下: 命令请求者 命令调用者 命令储存 命令回撤 这是什么?这,我直接想到了消息队列好吧。 看一下命令模式的使用场景: 当系统需要将请求调用者与请求接收者解耦时,命令模式使得调用者和接收者不直接交互。 当系统需要随机请求命令或经常增加或删除命令时,命令模式比较方便实现这些功能。 系统需要执行一组操作时,命令模式可以定义宏命令来实现该功能。 当系统需要支持命令的撤销(Undo)操作和恢复(Redo)操作时,可以将命令对象存储起来,采用备忘录模式来实现。

    58000发布于 2021-03-02
  • 来自专栏技术杂货店

    设计模式10】-- 顺便看看享元模式

    Part1享元模式是什么? 享元模式(FlyWeight),是结构型模式的一种,主要是为了减少创建对象的数量,减少内存占用以及提高性能。 说到这里,不知道你是否会想到池技术,比如String 常量池,数据库连接池,缓冲池等等,是的,这些都应用了享元模式。 :在单纯享元模式中,所有的具体享元类都是可以共享的,不存在非共享具体享元类。 复合享元模式:将一些单纯享元对象使用组合模式加以组合,还可以形成复合享元对象,这样的复合享元对象本身不能共享,但是它们可以分解成单纯享元对象,而后者则可以共享 这里我们说的是单纯享元模式,享元模式一般会有几种对象 Part3总结 优点:如果有很多相似或者重复的对象,使用享元模式,可以节省空间 缺点:如果重用很多,不同地方还做了特殊化处理,代码复杂度增加 设计模式其实是在软件工程的不断摸索中,总结出来的常用的一种设计思路

    34510编辑于 2022-02-15
  • 来自专栏AlbertYang的编程之路

    设计模式(10)-JavaScript如何实现组合模式???

    1 什么是组合模式 组合模式允许创建具有属性的对象,这些对象是原始项目或对象集合。集合中的每个项目本身可以容纳其他集合,创建深度嵌套结构。 树型控件是复合模式的一个完美例子。 组合模式用于简单化,一致化对单组件和复合组件的使用,其实它就是一棵树。 在存在着某种的层次结构,并且其中的一部分要实现某些操作,即可使用组合模式。 组合模式中的所有节点都共享一组通用的属性和方法,它既支持单个对象,也支持对象集合。 2 操作系统目录结构、公司部门组织架构、国家省市县等,像这么看起来复杂的现象,都可以使用组合模式,即部分-整体模式来操作。 2 主要参与者 ? 不过组合模式的弱点也在于此,如果层次过多,则性能将受到影响。组合模式应用需要符合两个条件,一是产生递归,二是具有相同的动作。

    1.4K41发布于 2020-09-08
  • 来自专栏学习笔记ol

    小谈设计模式10)—原型模式

    小谈设计模式10)—原型模式 专栏介绍 主要对目前市面上常见的23种设计模式进行逐一分析和总结,希望有兴趣的小伙伴们可以看一下,会持续更新的。 原型模式 这是一种创建型设计模式,它允许通过复制现有对象来创建新对象,而无需通过实例化类来创建。它通过克隆现有对象的属性和方法来创建新对象,从而避免了创建对象时的重复工作。 原型模式可以有效地提高对象的创建效率,并使对象的创建过程更加灵活和可扩展。 优缺点分析 优点 简化对象的创建 原型模式通过克隆原型对象来创建新的对象,避免了重复创建对象的过程,提高了对象的创建效率。 提供了一种可替代的对象创建方式 原型模式可以作为一种可替代的对象创建方式,特别适用于创建复杂对象或需要大量初始化的对象。

    33220编辑于 2023-10-11
  • 来自专栏用户7873631的专栏

    策略模式(javascript版)10

    //策略模式是把一个类分开成几个类,分别调用就行了,然后几个类调用一个方法就行了 /*class q { buy() { console.log("普通会员"); } } class w { 问题:这个与状态模式有什么不同呢? 不同点: 关键在于:把 if…else 拆分开,分出不同的策略,每个策略单独处理,而不是混在一起, 状态模式是混在一起的. 优点:;简洁把

    29130发布于 2020-10-28
  • 来自专栏Go与云原生

    istio-in-action - 10 VirtualService 实现 30x 路由重定向

    在 VirtualService 配置中, 除了 http rewrite 路由重写之外, 还有 http redirect 路由重定向。即常说的 30x。 有三个重要参数 uri: 重定向后的 uri redirectCode: 重定向时的 http response code。ex: 301, 302。默认值为 301 。 authority: 重定向后的 http host。即 http response header 中的 location 字段。 review HTTP/1.1 302 Found location: http://svc-review/review/all date: Mon, 15 Nov 2021 10 route 在同一条规则下互斥 - destination: host: svc-review 报错如下 for: "istio-samples/10

    94640编辑于 2022-12-24
  • 来自专栏博客专享

    并发设计模式实战系列(10):Balking(犹豫模式

    今天为大家带来的是并发设计模式实战系列,第10章Balking(犹豫模式),废话不多说直接开始~ 一、核心原理深度拆解 1. 与状态模式的区别 Balking:直接放弃不符合条件的请求(快速失败) State Pattern:将行为委托给不同状态对象处理 二、生活化类比:自动售货机 系统组件 现实类比 核心行为 Client 相似模式对比 模式 核心策略 适用场景 Balking 条件不满足立即放弃 状态校验场景(如自动保存) Retry 条件不满足循环重试 网络请求等可恢复场景 State 委托给状态对象处理 复杂状态转换场景 组合模式增强 // 结合Guard Suspension模式实现超时控制 public boolean autoSaveWithTimeout(long timeout) throws InterruptedException 我将延续原有结构,从 第六部分 开始扩展Balking模式的深度内容,保持技术解析的连贯性和完整性。 六、Balking模式变体与扩展(续) 1.

    23100编辑于 2025-05-20
领券