随笔分类 -  设计模式

摘要:模式动机 对于系统中某些对象,它们存储在同一个集合中,且具有不同的类型。对于该集合中的对象,可以接受一类称为访问者的对象来访问,不同的访问者其访问方式有所不同 Java 提供了用于存储多个元素的集合对象,集合中存储的对象有时候是同一类型,有时候不是同一类型,或许它们只是具有共同的父类。假如我们要针对 阅读全文
posted @ 2020-06-18 15:36 低吟不作语 阅读(463) 评论(0) 推荐(1) 编辑
摘要:概述 现实生活中很多事情的完成过程都包含几个基本步骤,例如请客吃饭,无论吃什么,一般都包含点单、吃东西、买单几个步骤,到底吃什么则具体情况具体分析 既然这几个步骤的次序是固定的,于是我们创建一个新的方法叫“请客”,在其中调用了点单、吃东西和买单,同时指定它们的执行次序,我们称这个“请客”为模板方法, 阅读全文
posted @ 2020-06-17 15:12 低吟不作语 阅读(454) 评论(0) 推荐(0) 编辑
摘要:概述 要完成一项任务,可以有多种不同的方式,外出旅游时可以选择多种不同的出行方式,如自行车、坐汽车、坐高铁或乘飞机等,每一种方式称为一个策略,我们可以根据环境或者条件的不同选择不同的策略来完成任务 在软件开发中,一项功能也有很多算法可以实现,如果我们直接把多种算法集中在一个类,或者说使用条件判断语句 阅读全文
posted @ 2020-06-12 08:59 低吟不作语 阅读(556) 评论(0) 推荐(0) 编辑
摘要:概述 很多情况下,一个对象的行为取决于一个或多个动态变化的属性,这样的属性叫做状态。一个对象可以拥有多个状态,这些状态可以相互转换,当对象状态不同时,其行为也有所差异 假设一个人就是对象,人根据心情不同会有很多状态,比如开心和伤心,这两种状态可以相互转换。开心的人可能会因为突然的噩耗而伤心,过了一段 阅读全文
posted @ 2020-06-06 10:33 低吟不作语 阅读(759) 评论(0) 推荐(0) 编辑
摘要:概述 在系统中,对象并不是孤立存在的,一个对象的改变可能会导致其他与之存在依赖关系的对象发生改变。观察者模式用于描述对象之间的依赖关系,一个对象发生改变会自动通知其他对象,其他对象将相应做出反应。发生改变的对象称为观察目标,被通知的对象称为观察者,一个观察目标可以对应多个观察者,而且观察者之间没有相 阅读全文
posted @ 2020-06-01 17:07 低吟不作语 阅读(589) 评论(0) 推荐(0) 编辑
摘要:概述 在软件使用过程中难免会出现一些误操作,如不小心删除了某些文字或图片,数据填入错误等,对于这些误操作,需要提供一种后悔机制,让系统可以回到误操作前的状态。备忘录模式提供了一种对象状态的撤销实现机制,当系统中某一对象需要恢复到某一历史状态时可以使用备忘录模式来进行设计 模式实例 某系统提供了用户信 阅读全文
posted @ 2020-05-28 11:39 低吟不作语 阅读(550) 评论(0) 推荐(0) 编辑
摘要:概述 以微信聊天为例,可以用户与用户直接聊天,也可以通过微信群聊天。前者的话,用户要和别的用户加为好友,即用户和用户之间存在多对多关系,一个用户如果要将相同的信息发送给所有其他用户,必须一个一个发送。而如果使用群聊天,一个用户可以向多个用户发送相同信息而无须一一进行发送,只需将信息发送到群中即可,群 阅读全文
posted @ 2020-05-27 12:51 低吟不作语 阅读(680) 评论(0) 推荐(0) 编辑
摘要:概述 一个聚合对象,如一个列表(List)或者一个集合(Set),应该提供一种方法来让别人可以访问它的元素,而又不暴露它的内部结构。此外,针对不同的需要,可能还要以不同方式遍历整个聚合对象,但是我们不希望在聚合对象中充斥着各种不同遍历的操作。怎样遍历一个聚合对象,又不需要了解聚合对象的内部结构,还能 阅读全文
posted @ 2020-05-25 15:57 低吟不作语 阅读(573) 评论(0) 推荐(1) 编辑
摘要:概述 如果在系统中某一特定类型的问题发生的频率很高,此时可以考虑将这些问题的实例表述为一个语言中的句子。再构建一个解释器,解释器通过解释这些句子来解决对应的问题。 举个例子,我们希望系统提供一个功能来支持一种新的加减法表达式语言,当输入表达式为 "1 + 2 + 3 - 4 + 1" 时,输出计算结 阅读全文
posted @ 2020-05-23 20:29 低吟不作语 阅读(492) 评论(0) 推荐(1) 编辑
摘要:概述 举个现实生活中的例子,开关是请求的发送者,电灯是请求的接收者,它们之间不存在直接的耦合关系,而是通过电线连接到一起,开关不需要知道如何将开灯或关灯请求传输给电灯,而是通过电线来完成这项功能。 可以理解为电线充当封装请求的命令对象,开关如果开则电线通电,并调用电灯的开灯方法,反之则关灯。不同电线 阅读全文
posted @ 2020-05-18 17:08 低吟不作语 阅读(591) 评论(0) 推荐(1) 编辑
摘要:概述 很多情况下,可以处理某个请求的对象不止一个,如大学里的奖学金审批,学生先向辅导员提交审批表,辅导员签字审批后再交给系主任签字审批,接着是院长审批,最后可能是校长审批,在这个过程中,奖学金申请表可以看作一个请求对象,不同级别审批者都可以处理该请求,除了辅导员之外,学生不需一一和其他审批者交互,只 阅读全文
posted @ 2020-05-16 17:25 低吟不作语 阅读(558) 评论(0) 推荐(0) 编辑
摘要:概述 某些情况下,一个客户不想或不能直接引用一个对象,此时可以通过代理对象实现间接引用,通过代理对象去掉客户不能看到的内容和添加客户需要的额外服务 模式实例 在一个论坛已注册用户和游客权限不同,已注册用户拥有发帖、修改注册信息、修改自己帖子等功能;而游客只能看到别人发的贴子,没有其他权限。本实例中我 阅读全文
posted @ 2020-05-14 22:41 低吟不作语 阅读(788) 评论(0) 推荐(0) 编辑
摘要:概述 有时候需要在系统中增加对象的个数,并且这些对象是相同或相似的。为了避免出现大量相同或相似的对象,享元模式通过共享技术实现相同或相似对象的重用,享元模式通常会出现工厂模式,需要创建一个享元工厂来维护一个享元池,用于存储具有相同或相似的享元对象 模式分析 享元模式的核心在于享元工厂类,享元工厂类的 阅读全文
posted @ 2020-05-09 18:02 低吟不作语 阅读(557) 评论(0) 推荐(1) 编辑
摘要:概述 在大多数情况下,网站都会提供一个网站首页作为入口,提供通往各个子栏目的超链接。用户只需记住网站首页网站 URL,而无须记住每个子栏目的网址 同理,用户与系统的交互可以通过一个外观对象进行,提供实现各种功能的子系统接口 模式实例 一个电源总开关可以控制四盏灯、一个风扇、一台空调和一台电视机的启动 阅读全文
posted @ 2020-05-02 15:25 低吟不作语 阅读(463) 评论(0) 推荐(1) 编辑
摘要:概述 装饰模式可以在不改变一个对象本身的基础上给对象增加额外的新行为,如一张照片,可以不改变照片本身,给它增加一个相框,使得它具有防潮功能,用户可以根据需要增加不同类型的相框 在开发中,可以通过继承使子类为父类方法添加功能,但这种方式是静态的,用户不能控制增加行为的方式和时机。 装饰模式将一个对象嵌 阅读全文
posted @ 2020-05-01 13:42 低吟不作语 阅读(727) 评论(2) 推荐(0) 编辑
摘要:概述 一个容器对象下拥有多个叶子对象,类似树形结构 模式实例 定义一个抽象类,它既可以代表叶子,也可以代表容器 public abstract class Component { public abstract void add(Component c); public abstract void 阅读全文
posted @ 2020-03-16 14:41 低吟不作语 阅读(566) 评论(0) 推荐(0) 编辑
摘要:概述 如果要绘制矩形、圆形、椭圆、正方形,至少需要四个形状类,如果绘制的图形需要具有不同的颜色,如红色、绿色、蓝色等,此时有两种设计方案: 第一种:为每一个形状提供一套各种颜色的版本,使用继承的方法,如果有四种形状,十二种颜色,则需要四十八个类。如果要增加新形状,则同时也要具备所有的颜色 第二种:提 阅读全文
posted @ 2020-03-13 17:58 低吟不作语 阅读(460) 评论(0) 推荐(1) 编辑
摘要:概述 我国的生活用电电压是 220V,而笔记本电脑、手机等电子设备的电压都没有这么高,这时候就需要电源适配器。有时,现有类所提供的接口不一定是用户所期待的,使用适配器可以对现有接口转化为客户期望的接口 适配器模式包含如下角色: Adapter(适配器类):对 Adaptee 进行适配 Adaptee 阅读全文
posted @ 2020-03-12 14:20 低吟不作语 阅读(545) 评论(0) 推荐(0) 编辑
摘要:概述 单例模式可以保证系统中一个类只有一个实例而且该实例易于被外界访问 单例模式有三个要点: 某个类只能有一个实例 自行创建这个实例 自行向整个系统提供这个实例 因此,单例类必须有如下实现: 单例类的构造函数为私有 提供一个自身的静态私有成员变量 提供一个公有的静态工厂方法 模式实例 public 阅读全文
posted @ 2020-03-11 00:54 低吟不作语 阅读(450) 评论(0) 推荐(0) 编辑
摘要:概述 有时候需要多次创建某一类型对象,为了简化创建过程,可以只创建一个对象,然后再通过克隆的方法复制出多个相同的对象 深克隆与浅克隆 通常情况下,一个类包含一些成员对象,在使用原型模式克隆对象时,根据其成员对象是否也克隆,原型模式可分为两种形式:深克隆和浅克隆 浅克隆:被复制对象的对象成员变量具有与 阅读全文
posted @ 2020-03-09 22:27 低吟不作语 阅读(577) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示