蝇量 蝇量模式:如果让某个类的一个实例能用来提供许多“虚拟实例”,就使用蝇量模式。 在一个设计房子的平台中,周围要加上一些树,树有一个坐标XY坐标位置,而且可以根据树的年龄动态将自己绘制出来。 使用一个树实例和一个客户对象来维护“所有”树的状态,这就是蝇量模式。 设计类图: ? 用途和缺点: 1、当一个类有许多的实例,而这些实例能够被统一方法控制,我们就可以使用蝇量模式。 2、蝇量的缺点在于一旦你实现了它,单个实例无法拥有独立而不同的行为。 6 //数据初始化或者对象等 7 } 8 public void operation(string input) 9 { 10 3、当语法数目太大太复杂时,这个模式会变得繁杂。
前言 在软件开发的世界里,设计模式如同一本精妙的编码诗集,已经成为一种标准的编程实践。在Java编程中,设计模式很重要。 本人将制作一个关于Java设计模式的系列文章,总共23种设计模式将以一篇一篇文章讲解,代码笔记已开源:Gitee点击跳转。在上一篇《Java设计模式(9)享元模式》文章中,我们介绍了享元模式。 本文是这个系列的第十篇章,我们将讲解一下代理模式的实现方式、应用场景以及它的用途。 代理模式 在代理模式中,一个类代表另一个类的功能,这种类型的设计模式属于结构型模式。 代理模式通过引入一个代理对象来控制对原对象的访问。代理对象在客户端和目标对象之间充当中介,负责将客户端的请求转发给目标对象,同时可以在转发请求前后进行额外的处理。 代理模式又有两种主要形式: 静态代理:在编译时就已经确定了代理类和被代理类之间的关系,通常需要为每个被代理类都编写一个对应的代理类,并实现相同的接口。
1.定义 组合模式是一种结构型模型,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。 这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。 上回说到刘备被设计入赘江东后,通过诸葛孔明的锦囊妙计成功化险为夷。回到荆州后刘备一心想匡扶汉室,于是准备继续招兵买马。 如此看来这种层次结构不就是我们说的组合模式要实现的内容吗? 相似的对象当成单一对象,部门和人员都具备组织树的特性即部门下可能是人员也有可能存在子部门信息。同时都具备基础信息,比如名字等。 2.组合模式实现 OrganizationalStructure抽象类表示组织结构,其中由于部门和人员信息都属于组织结构具有相似,所以部门和人员信息都是他的子类。 参考文献《图解设计模式》 代码获取地址:https://gitee.com/bughong/design-pattern
解释器模式第一遍没有读懂,看到后面说实际项目中很少用到,因为它会引起效率、性能以及维护等问题,会直接用已有的成熟的工具。 又看了一遍有点明白了,有点类似写算法题遇到的情况,又有点编译原理里面的味道。 这《设计模式之禅》虽然没有技术过期的问题,但买了纸书,现在还是在看电子版的,在公司也不适合看纸书,而且属于看完记录完也不想再看的书。 以后凡是不需要阅读多遍的书,都不要花钱去买纸书。 享元模式 池中共享对象,减少对象创建,减小 OOM 机率。 比如 Android 从 xml 构建 View 时的构造器。Map 保存对象,有就拿出来用,没有再创建存到 Map 中去。 虽然可以使用享元模式可以实现对象池,但是这两者还是有比较大的差异,对象池着重在对象的复用上,池中的每个对象是可替换的,从同一个池中获得 A对象和 B 对象对客户端来说是完全相同的,它主要解决复用,而享元模式在主要解决的对象的共享问题
组合模式属于对象的结构模式,有时又叫做“部分——整体”模式。 组合模式将对象组织到树结构中,可以用来描述整体与部分的关系。组合模式可以使客户端将单纯元素与复合元素同等看待。 二、组合模式-安全式 1、基础概念 安全式的组合模式要求管理聚集的方法只出现在树枝构件类中,而不出现在树叶构件类中。 在安全式的组合模式里,构件角色并不定义出管理子对象的方法,这一定义由树枝构件对象给出。 树叶构件(Leaf)角色 树叶对象是没有下级子对象的对象,定义出参加组合的原始对象的行为。 -透明式 1、概念图解 与安全式的组合模式不同的是,透明式的组合模式要求所有的具体构件类,不论树枝构件还是树叶构件,均符合一个固定接口。
没想到才经过了10分钟,系统就崩溃了!为什么啊?小王一查数据,才突然发现,在这短短10分钟,就是有100万人要填报自己的个人信息用于疫苗检测数据采集。系统的内存被打满了,内存溢出导致了系统崩溃。 这个解决方式就是我们今天要介绍的设计模——享元模式/蝇量模式。 一、模式定义 享元模式/蝇量模式(flyweight Pattern) 享元模式是池技术的重要实现方式,其定义如下:使用共享对象可以有效地支持大量的细粒度的对象。 构造函数中初始化池中数据 public NucleicInfoClient() { NucleicInfo nucleicInfo; for (int i = 1; i <=10 pool.containsKey(key)) return null; return pool.get(key); } } 蝇量模式测试类
观察者模式又叫发布订阅模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时会通知所有观察者对象,使它们能够自动更新自己。 观察者模式 观察者模式又叫发布订阅模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时会通知所有观察者对象,使它们能够自动更新自己。 参考: design-patterns.readthedocs |观察者模式 refactoringguru | 观察者模式 博客园 | 简说设计模式——观察者模式 CSDN | 设计模式 ( 十五 ) 需要在系统中创建一个触发链,A对象的行为将影响B对象,B对象的行为将影响C对象……,可以使用观察者模式创建一种链式触发机制 实例: MVC模式是一种架构模式,它包含三个角色:模型(Model),视图( 观察者模式可以用来实现MVC模式,观察者模式中的观察目标就是MVC模式中的模型(Model),而观察者就是MVC中的视图(View),控制器(Controller)充当两者之间的中介者(Mediator
” 责任链模式优点显而易见,降低了请求对象与处理对像之间的耦合度,处理对象易于扩展,增强了指派处理对象的灵活性。 责任链简化了对象之间的连接。 链式结构 责任链模式主要由3个要素组成: 抽象处理者(Handler)角色:定义一个处理请求的接口,包含抽象处理方法和一个后继连接。 关于对责任链模式的看法 那么我们什么时候合适使用责任链模式呢? 一般如果由多个对象处理一个请求,需要使用哪对象由实际调用的时候确定。这种场景我们就可以使用调用者模式。 大家可以思考下这方面能不能使用责任链模式呢。 还有在订单系统中,订单状态的处理是否可以使用此种设计模式更为优秀呢。 所以使用责任链模式需要控制链路长度。比如在Handler中设置最大节点数量。如果节点数量超出这个最大数量,就不允许该链路的创立。
策略模式 基本介绍 1)策略模式(StrategyPattern)中,定义算法族(策略组),分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户 2)这算法体现了几个设计原则, 说明:从上图可以看到,客户context有成员变量strategy或者其他的策略接口,至于需要使用到哪个策略,我们可以在构造器中指定 策略模式优化IF else 类图 使用策略模式+工厂+模板方法 解决多分类查询 本来我想在其中加入状态模式, 用于控制是根据一些参数, 来决定查询DB还是查询缓存, 但是后来应为一些场景是缓存实现不了的, 只能查DB了, 但是一些公用数据还是查询缓存的, 后续如果需要扩展其他查询, PressureVo> addIsOnline(List<Pressure> records, List<String> deptCodes) { // 业务逻辑 } } 策略模式的注意事项和细节 1)策略模式的关键是:分析项目中变化部分与不变部分 2)策略模式的核心思想是:多用组合/聚合少用继承;用行为类组合,而不是行为的继承。
本节介绍如何给复杂的聚合型数据结构提供一个遍历方法的设计模式——迭代器模式(Iterator Pattern)。 迭代器模式的关键思想是将对列表的访问和便利从列表对象中分离出来,放入一个独立的迭代器对象中。迭代器类定义了访问该列表元素的接口。 迭代器模式能够提供一种方法按照顺序访问一个聚合对象中的所有元素,而又不需要暴露该对象的内部表示。 迭代器模式的结构图如图所示。 ? 迭代器模式的各组成部分及含义说明如下。 迭代器模式的优点如下。 迭代器模式支持以不同的方式遍历同一聚合,复杂的聚合可以用多种方式进行遍历。例如二叉树遍历方法有 4 种:先序遍历、中序遍历、后序遍历和层次遍历。 class ConcreteAggregate(Aggregate): def __init__(self): self.data_structure = list(range(10
没想到才经过了10分钟,系统就崩溃了!为什么啊?小王一查数据,才突然发现,在这短短10分钟,就是有100万人要填报自己的个人信息用于疫苗检测数据采集。系统的内存被打满了,内存溢出导致了系统崩溃。 这个解决方式就是我们今天要介绍的设计模——享元模式/蝇量模式。 一、模式定义享元模式/蝇量模式(flyweight Pattern)享元模式是池技术的重要实现方式,其定义如下:使用共享对象可以有效地支持大量的细粒度的对象。 二、模式类图根据上面的小故事,我们来绘制出相关模式的类图。 pool.containsKey(key)) return null; return pool.get(key); }}蝇量模式测试类:FlyweightTest.javapublic
本文介绍我做的框架,这是一个轻量的框架,可以同时使用其它的框架,用于多个页面之间,多个 ViewModel 之间的通信。 这个框架比较简单,很多地方都抄袭了MVVMLight,所以是他的轻量版。 暂时我把框架放在 Nuget ,提供 UWP 和 WPF 的下载。 如果之前没有读过win10 uwp MVVM入门 那么我建议看一下 首先是创建 ViewModel ,创建的 ViewModel 可以分为两个。一个是 ViewModel 一个是 AModel。 于是主页面的 ViewModel 就可以继承 NavigateViewModel ,可以在调试模式下不传入 Frame 并且在属性生成、条件编译符添加 NOGUI 就可以进行单元测试,各种页面跳转的测试 IOT 大神 - 博客园 杨宇杰 快乐 就在你的心 的博客 ---- 本文会经常更新,请阅读原文: https://lindexi.gitee.io/lindexi/post/win10
本文介绍我做的框架,这是一个轻量的框架,可以同时使用其它的框架,用于多个页面之间,多个 ViewModel 之间的通信。 这个框架比较简单,很多地方都抄袭了MVVMLight,所以是他的轻量版。 暂时我把框架放在 Nuget ,提供 UWP 和 WPF 的下载。 如果之前没有读过win10 uwp MVVM入门 那么我建议看一下 首先是创建 ViewModel ,创建的 ViewModel 可以分为两个。一个是 ViewModel 一个是 AModel。 于是主页面的 ViewModel 就可以继承 NavigateViewModel ,可以在调试模式下不传入 Frame 并且在属性生成、条件编译符添加 NOGUI 就可以进行单元测试,各种页面跳转的测试 源代码:https://github.com/lindexi/UWP/tree/master/uwp/src/Framework 现在已经有几个项目在使用这个框架,其中有现在公司的小项目和win10 uwp
(中), 继续更新设计模式,今天介绍的设计模式有责任链模式、蝇量模式、解释器模式、中介者模式、备忘录模式、原型模式和访问者模式; 文章对设计模式的特点和使用场景进行了总结,每个设计模式分配的篇幅较少,给了解过设计模式的作为速查 报销不了的金额交给经理,而经理将自己处理不了的给CEO处理; 张三要报销200元,leader就能批准; 李四要报销8000元,leader报销不了,就交给经理,经理也处理不了,最后交给CEO报销; 蝇量模式 (Flyweight) 介绍 蝇量模式:使用一个对象来存储和模拟多个虚拟对象,大大减少多个对象的内存占用。 实例化多个相似实例会占用较多内存空间,蝇量模式使用一个对象类变量保存多个对象的属性,以一个对象控制多个对象; 蝇量模式可以极大地减少内存占用,也可以方便对多个对象进行统一管理; 实例一旦实现了蝇量模式, 包括:装饰者模式、适配器模式、外观模式、桥接模式、组合模式、代理者模式、蝇量模式。 设计模式的目标,是用来解决通用问题的。
设计模式系列:http://aphysia.cn/categories/designpattern 开局还是那种图,各位客官往下看... 享元模式是什么? 享元模式(FlyWeight),是结构型模式的一种,主要是为了减少创建对象的数量,减少内存占用以及提高性能。 :在单纯享元模式中,所有的具体享元类都是可以共享的,不存在非共享具体享元类。 复合享元模式:将一些单纯享元对象使用组合模式加以组合,还可以形成复合享元对象,这样的复合享元对象本身不能共享,但是它们可以分解成单纯享元对象,而后者则可以共享 这里我们说的是单纯享元模式,享元模式一般会有几种对象 [20211227232719.gif] 总结 优点:如果有很多相似或者重复的对象,使用享元模式,可以节省空间 缺点:如果重用很多,不同地方还做了特殊化处理,代码复杂度增加 设计模式其实是在软件工程的不断摸索中
装饰器模式 装饰器模式的定义: 动态的给一个对象添加额外的职责,就功能来说,装饰模式相比子类更为灵活 装饰器模式的四个角色: Componment 抽象构建角色:该角色用于规范需要装饰的对象 ConcreateComponment 该角色是需要被装饰地 对象 Decorator: 装饰角色:一般是一个抽象类,该角色持有私有的一个抽象构件对象 ConcreateDecorator: 具体装饰角色;感觉主要负责对构件对象进行装饰 装饰器模式的简单示例 componment); componment = new ConcreateDecorator(componment); componment.doingProcedureA(); } } 装饰器模式的优点和使用范围 装饰器模式的优点: 装饰类和被装饰类可以独立发展,而不会相互耦合 装饰模式是继承关系的一种替代方案 装饰模式可以动态的扩展一个实现类的功能 装饰器模式的应用场景: 用于扩展一个类的功能,或者给一个类添加附加职责 动态的给一个对象天机功能,这些功能可以被动态的撤销 需要位一批的兄弟类进行改装或加装功能 装饰器模式的缺点: 多层的装饰较为复杂
@toc 命令模式 咱也没读过什么书,看网上的命令模式讲的那叫个花里胡哨,看来看去,我接收到的讯息如下: 命令请求者 命令调用者 命令储存 命令回撤 这是什么?这,我直接想到了消息队列好吧。 看一下命令模式的使用场景: 当系统需要将请求调用者与请求接收者解耦时,命令模式使得调用者和接收者不直接交互。 当系统需要随机请求命令或经常增加或删除命令时,命令模式比较方便实现这些功能。 系统需要执行一组操作时,命令模式可以定义宏命令来实现该功能。 当系统需要支持命令的撤销(Undo)操作和恢复(Redo)操作时,可以将命令对象存储起来,采用备忘录模式来实现。
Part1享元模式是什么? 享元模式(FlyWeight),是结构型模式的一种,主要是为了减少创建对象的数量,减少内存占用以及提高性能。 说到这里,不知道你是否会想到池技术,比如String 常量池,数据库连接池,缓冲池等等,是的,这些都应用了享元模式。 :在单纯享元模式中,所有的具体享元类都是可以共享的,不存在非共享具体享元类。 复合享元模式:将一些单纯享元对象使用组合模式加以组合,还可以形成复合享元对象,这样的复合享元对象本身不能共享,但是它们可以分解成单纯享元对象,而后者则可以共享 这里我们说的是单纯享元模式,享元模式一般会有几种对象 Part3总结 优点:如果有很多相似或者重复的对象,使用享元模式,可以节省空间 缺点:如果重用很多,不同地方还做了特殊化处理,代码复杂度增加 设计模式其实是在软件工程的不断摸索中,总结出来的常用的一种设计思路
1 什么是组合模式 组合模式允许创建具有属性的对象,这些对象是原始项目或对象集合。集合中的每个项目本身可以容纳其他集合,创建深度嵌套结构。 树型控件是复合模式的一个完美例子。 组合模式用于简单化,一致化对单组件和复合组件的使用,其实它就是一棵树。 在存在着某种的层次结构,并且其中的一部分要实现某些操作,即可使用组合模式。 组合模式中的所有节点都共享一组通用的属性和方法,它既支持单个对象,也支持对象集合。 2 操作系统目录结构、公司部门组织架构、国家省市县等,像这么看起来复杂的现象,都可以使用组合模式,即部分-整体模式来操作。 2 主要参与者 ? 不过组合模式的弱点也在于此,如果层次过多,则性能将受到影响。组合模式应用需要符合两个条件,一是产生递归,二是具有相同的动作。
小谈设计模式(10)—原型模式 专栏介绍 主要对目前市面上常见的23种设计模式进行逐一分析和总结,希望有兴趣的小伙伴们可以看一下,会持续更新的。 原型模式 这是一种创建型设计模式,它允许通过复制现有对象来创建新对象,而无需通过实例化类来创建。它通过克隆现有对象的属性和方法来创建新对象,从而避免了创建对象时的重复工作。 原型模式可以有效地提高对象的创建效率,并使对象的创建过程更加灵活和可扩展。 优缺点分析 优点 简化对象的创建 原型模式通过克隆原型对象来创建新的对象,避免了重复创建对象的过程,提高了对象的创建效率。 提供了一种可替代的对象创建方式 原型模式可以作为一种可替代的对象创建方式,特别适用于创建复杂对象或需要大量初始化的对象。