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

    Head First设计模式——模式和解释器模式

    模式:如果让某个类的一个实例能用来提供许多“虚拟实例”,就使用模式。 在一个设计房子的平台中,周围要加上一些树,树有一个坐标XY坐标位置,而且可以根据树的年龄动态将自己绘制出来。 使用一个树实例和一个客户对象来维护“所有”树的状态,这就是模式。 设计类图: ? 用途和缺点: 1、当一个类有许多的实例,而这些实例能够被统一方法控制,我们就可以使用模式。 2、的缺点在于一旦你实现了它,单个实例无法拥有独立而不同的行为。 一般书中讲解的模式不一定在我们使用的时候需要完全照搬,可以多些对应的解释器类都是合理的。 类图: ? 3、当语法数目太大太复杂时,这个模式会变得繁杂。

    53430发布于 2020-08-11
  • 来自专栏我是业余自学C/C++的

    4.信号

    整型信号 整型数 S<=0时,信号无效; P(wait)原语 V(singal)原语 等待原语: wait(S): while S<=0 do no-operation S:=S-1; 释放原语 : singal(S): S:=S+1; wait(s)和singal(s)是原子操作 只要信号S<=0就不断测试,不满足让权等待 记录型信号 记录型结构,包含两个数据项: type S.value为资源信号,其初值表示某类资源的数目。 S.value>=0时,表示系统当中可用资源数目; S.value<0时,表示等待使用资源的进程个数。 wakeup(S,L) end //S.value>=0:表示系统中可用的资源数量 //S.value<0:其值表示已阻塞的进程数量 //S.value初值为1时:只允许一个进程访问临界资源,是互斥信号 AND型信号(可解决记录型信号的死锁问题) 基本思想: 将进程在整个运行中需要的所有资源,一次性全部分配给进程,待进程使用完后一起释放。

    52120发布于 2019-03-12
  • 来自专栏惊羽-布壳儿

    设计模式(4) -单例模式

    当实例的应用场景是单例,并且创建和销毁的开销比较大,长时间应用的实例,考虑用单例模式; ① spring依赖注入时,其注入实例都是单例的 源码 : protected Object getSingleton

    21520编辑于 2022-06-15
  • 来自专栏JMCui

    设计模式 — 终章.

    ~ 4模式(Flyweight Pattern) 概念:让某个类的一个实例能用来提供许多“虚拟实例”。 模式主要用于减少创建对象的数量,以减少内存占用和提高性能。模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。 角色:  1. 抽象(Flyweight):定义了对对象外部状态的操作接口。使用该接口,可在Client中修改对象的外部状态。  2. 无可共享内部状态的具体(UnsharedConcreteFlyweight):无内部状态,所以只实现操作外部状态的接口。  4. 工厂(FlyweightFactory):负责管理对象,形成一个对象池,提供对取出对象的方法,取出时若池中对象足够,就直接返回,若对象不足则创建后返回。 UML: ?

    49920发布于 2019-03-06
  • 来自专栏全栈程序员必看

    设计模式(4)-对象创建型模式-Prototype模式

    1.对象创建型模式 1.4 Protoype模式 1.4.1需求 通过拷贝原形对象创建新的对象。 p1=p->Clone(); return 0; } 注:这里仅仅是说明概念,没有涉及C++常见的深度拷贝问题. 1.4.4 样例-JAVA 在Java中,原型模式能够非常 上面clone()方法中被凝视的语句之后再測试,得到结果例如以下: 拷贝之前的原型: [蚂蚁 …] 拷贝得到的对象: [蚂蚁 …, 小蚂蚁 …] 拷贝之后的原型: [蚂蚁 …] 在Java中使用原型模式 Prototype是相当简单的,仅仅要记住几点注意点,就能够方便地实现该模式了。

    42710编辑于 2022-01-24
  • 来自专栏爱敲代码的猫

    java设计模式(4)-原型设计模式

    这篇推文学习创建型模式最后一种-原型模式,该模式的思想是将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象,以便使用 首先需要了解对象深、浅复制的概念: 浅拷贝:将一个对象复制后,基本数据类型的变量都会重新创建 System.out.println( cat.getClass() == cat_2.getClass());/true } } 优点 如果创建新的对象比较复杂时,可以利用原型模式简化对象的创建过程 原型模式提供了简化的创建结构。 缺点 在实现深克隆的时候可能需要比较复杂的代码。 如果系统要保存对象的状态,而对象的状态变化很小,或者对象本身占内存不大的时候,也可以使用原型模式配合备忘录模式来应用。 相反,如果对象的状态变化很大,或者对象占用的内存很大,那么采用状态模式会比原型模式更好。

    67950发布于 2019-10-17
  • 来自专栏Linux驱动

    4.设计模式-策略模式(Strategy)

    模式使得算法可独立于使用它的客户程序(稳定)而变化(扩展,子类化)。 如何解决:将这些算法封装成一个一个的类,通过工厂来实现任意地替换。 优点: 1、算法可以自由切换。 2、避免使用多重条件判断。 在不使用策略模式之前是这样写的: //支付方式 enum PayMode { AliPay, WeChatPay , JDPay }; class Payment 所以可以使用策略模式来将这些复杂的逻辑判断分成一个个单独的类,实现同一个接口或者继承于同一个父类. 写法如下所示: ?

    58020发布于 2021-07-08
  • 来自专栏用户7873631的专栏

    装饰器模式4(javascript版)4

    //装饰者模式 //致命思想:人穿上衣服 /*class Circle { //这里不行,因为下面要调用上面的进行装饰的啊 draw() { console.log

    33720发布于 2020-10-28
  • 来自专栏技术客栈

    Java设计模式4)原型模式

    前言 在软件开发的世界里,设计模式如同一本精妙的编码诗集,已经成为一种标准的编程实践。在Java编程中,设计模式很重要。 本人将制作一个关于Java设计模式的系列文章,总共23种设计模式将以一篇一篇文章讲解,代码笔记已开源:Gitee点击跳转。在上一篇《Java设计模式(3)建造者模式》文章中,我们介绍了建造者模式。 本文是这个系列的第四篇章,我们将讲解一下原型模式的实现方式、应用场景以及它的用途。 原型模式 原型模式是一种创建型设计模式,其主要目的是通过复制现有对象来创建新对象,而不是通过实例化类来创建。 需要避免构造函数的约束: 如果类的构造函数有一些约束条件,而克隆是一种更灵活的创建方式,可以选择使用原型模式。 通过实现Cloneable接口,并重写Object类中的clone()方法,可以实现原型模式

    26410编辑于 2024-04-18
  • 来自专栏Lvshen的技术小屋

    设计模式4之模板方法模式

    模板方法模式是这样定义的: “定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。它是一种类行为型模式。 在写代码之前我们需要了解实现模板方法模式需要存在几个要素: 抽象类:定义一个算法的基本骨架,需要有一个模板方法和多个基本方法 具体类:实现抽象类中定义的抽象方法 那么什么是模板方法呢? 关于模板方法模式的思考 从上面代码我们发现,模板方法templateMethod()的整体步骤是固定的,变的是具体方法和抽象方法里面的内容。

    31130编辑于 2022-05-05
  • 来自专栏∑小熊猫的博客

    Java 设计模式系列(4) —— 工厂模式

    工厂方法模式 工厂模式用于实现逻辑的封装,并通过公共的忌口提供对象的实例化服务,在添加新类时只需要做少量的修改。 1. 静态工厂模式(简单工厂模式) ? 静态工厂属于创建者模式,静态工厂模式的实现需要三个角色 简单工厂:负责创建具体产品产品,工厂类的方法可以被外界直接调用 抽象产品:在 Java 中,抽象产品是由抽象类或者接口担任的,用以让具体产品继承或实现 工厂方法模式 工厂方法模式又称为多态性工厂模式,指定一个创建对象的接口,但由实现这个接口的类来决定实例化哪一个类。 ? 在工厂方法模式中,共涉及到4个角色: 抽象工厂角色:定义产品对象的产生 具体工厂角色:实现了抽象共产,负责具体产品的创建 抽象产品角色:定义具体产品的共性 具体产品角色:具体产品的实例 工厂方法模式示例 上图为 抽象工厂模式的一个 UML 图 我们可以借助下图帮助我们理解一下 ?

    37310发布于 2021-01-05
  • 来自专栏技术杂货店

    设计模式4】-- 建造者模式详解

    什么是建造者模式 建造者模式是设计模式的一种,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 (来源于百度百科) 建造者模式,其实是创建型模式的一种,也是23种设计模式中的一种,从上面的定义来看比较模糊,但是不得不承认,当我们有能力用简洁的话去定义一个东西的时候,我们才是真的了解它了,因为这个时候我们已经知道它的界限在哪 使用场景 构建这模式的好处是什么?首先想到的应该是将构建的过程解耦了,构建的过程如果很复杂,单独拎出来写,清晰简洁。 同样,构建者模式也比较适用于不同的构造方法或者构造顺序,可能会产生不同的构造结果的场景。 最近在公司用GRPC,里面的对象几乎都是基于构建者模式,链式的构建确实写着很舒服,也比较优雅,代码是写给人看的,我们所做的一切设计模式,都是为了拓展,解耦,以及避免代码只能口口相传。

    35720编辑于 2021-12-02
  • 来自专栏枕边书

    设计模式,Lets “Go”! (下)

    (中), 继续更新设计模式,今天介绍的设计模式有责任链模式模式、解释器模式、中介者模式、备忘录模式、原型模式和访问者模式; 文章对设计模式的特点和使用场景进行了总结,每个设计模式分配的篇幅较少,给了解过设计模式的作为速查 报销不了的金额交给经理,而经理将自己处理不了的给CEO处理; 张三要报销200元,leader就能批准; 李四要报销8000元,leader报销不了,就交给经理,经理也处理不了,最后交给CEO报销; 模式 (Flyweight) 介绍 模式:使用一个对象来存储和模拟多个虚拟对象,大大减少多个对象的内存占用。 实例化多个相似实例会占用较多内存空间,模式使用一个对象类变量保存多个对象的属性,以一个对象控制多个对象; 模式可以极大地减少内存占用,也可以方便对多个对象进行统一管理; 实例一旦实现了模式, 包括:装饰者模式、适配器模式、外观模式、桥接模式、组合模式、代理者模式模式。 设计模式的目标,是用来解决通用问题的。

    83360发布于 2018-01-04
  • 来自专栏用户3645619的专栏

    4)Flink CEP SQL贪婪词演示

    基于上一篇(3)Flink CEP SQL宽松近邻代码演示的延展,在上一篇中我们使用贪婪词 +(至少匹配1行或多行),本篇将演示多种贪婪词的效果:(1)使用贪婪词 *(匹配0行或多行)public , LocalDateTime.parse("2021-12-10 10:00:02", dateTimeFormatter)), new Ticker(4, tEnv.executeSql(sql); res.print(); tEnv.dropTemporaryView("CEP_SQL_10");}匹配到了三组数据图片贪婪词 *(匹配0行或多行)图片(2)使用贪婪词 {n}(严格匹配n行)图片图片图片(3)使用贪婪词 {n,}(n或者更多行(n≥O))图片图片图片

    39230编辑于 2022-08-20
  • 来自专栏爪哇缪斯

    趣解设计模式之《小王设计的疫苗管理平台系统》

    这个解决方式就是我们今天要介绍的设计模——享元模式/模式。 一、模式定义 享元模式/模式(flyweight Pattern) 享元模式是池技术的重要实现方式,其定义如下:使用共享对象可以有效地支持大量的细粒度的对象。 二、模式类图 根据上面的小故事,我们来绘制出相关模式的类图。 pool.containsKey(key)) return null; return pool.get(key); } } 模式测试类 "北京市朝阳区yy大街yy小区y号楼y号", 7); PersonInfo john = new PersonInfo("john", "上海市市徐汇区zz大街zz小区z号楼z号", 4)

    30130编辑于 2023-10-06
  • 来自专栏悠扬前奏的博客

    JavaScript设计模式4)——Singleton(单例)模式

    Singleton模式的经典意义为:在该实例不存在的情况下,可以通过一个方法创建一个类来实现创建一个类的新的实例;如果实例已经存在,简单返回对该对象的引用。 使用场景 Singleton模式适用性的描述为: 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它 该唯一的实例应该是可以通过子类化可扩展的,而且客户应该无需更改代码就能使用一个扩展实例。

    45820发布于 2019-05-28
  • 来自专栏全栈程序员必看

    《JavaScript 模式》读书笔记(4)— 函数4

    这篇文章我们主要来学习下即时对象初始化、初始化时分支、函数属性-备忘模式以及配置对象。这篇的内容会有点多。 六、即时对象初始化 保护全局作用域不受污染的另一种方法,即时对象初始化模式。 init:function() { console.log(this.gimmeMax()); // 更多初始化任务 } }).init()   就语法而言,对待这种模式就像在使用对象字面创建一个普通的对象 也可以将字面包装到括号中(分组操作符),它指示JavaScript引擎将大括号作为对象字面,而不是作为一个代码块(也不是if或者for循环)。在该括号结束之后,可以立即调用init()方法。 查明DOM元素的计算样式或附加的事件处理程序是另外一个可以受益于初始化时分支模式的场景。 八、函数属性—备忘模式 函数是对象,因此它们具有属性。事实上,它们确实还有属性和方法。

    31740编辑于 2022-07-21
  • 来自专栏zaking's

    《JavaScript 模式》读书笔记(4)— 函数4

      这篇文章我们主要来学习下即时对象初始化、初始化时分支、函数属性-备忘模式以及配置对象。这篇的内容会有点多。 六、即时对象初始化 保护全局作用域不受污染的另一种方法,即时对象初始化模式。 init:function() { console.log(this.gimmeMax()); // 更多初始化任务 } }).init()   就语法而言,对待这种模式就像在使用对象字面创建一个普通的对象 也可以将字面包装到括号中(分组操作符),它指示JavaScript引擎将大括号作为对象字面,而不是作为一个代码块(也不是if或者for循环)。在该括号结束之后,可以立即调用init()方法。 查明DOM元素的计算样式或附加的事件处理程序是另外一个可以受益于初始化时分支模式的场景。 八、函数属性—备忘模式 函数是对象,因此它们具有属性。事实上,它们确实还有属性和方法。

    48410发布于 2020-03-31
  • 来自专栏Python机器学习算法说书人

    Python 设计模式4):生成器模式

    生成器模式与工厂方法模式有着相似之处,两者都属于创建型模式,并且都是将对象创建的任务交给一个单独的类去完成。 生成器模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创造不同的表示。 生成器模式的设计类图如图所示。 ? 生成器模式按照一个指定的过程逐步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以创建它们,而不必知道内部的具体构建细节。 生成器模式的主要思想是抽象出创建对象的步骤,使得这些步骤的不同实现可以创建对象的不同表示。通常,生成器模式被用来创建符合组合模式的产品对象。 生成器模式所包含的各组成部分意义如下。 使用生成器模式的特点如下。 生成器让用户可以变化它建造产品的内部表达形式,它也隐藏了产品怎样被装配的细节。 生成器模式与抽象工厂模式有相似之处,都返回一些由其他对象组成的类的对象。主要区别是,抽象工厂模式返回一个类族,而生成器模式逐步按照次序构建一个复杂的对象,最后该对象被返回。

    1.3K10发布于 2019-07-26
  • 来自专栏Web 技术

    【javascript设计模式4.单例模式

    Singleton 单例模式 单例模式,能够限制类的实例化次数只能为一次。 单例模式,在该实例不存在的情况下, 可以通过一个方法创建一个类来实现创建类的新实例;如果实例已经存在,它会简单返回该对象的引用; 示例: <script type="text/javascript singleA.getRandomNumber()===singleB.getRandomNumber());//true </script> 在实践中,当在系统中确实需要一个对象来协调其他对象时,>Singleton<em>模式</em>很有用

    27610编辑于 2023-10-07
领券