
设计模式
文章平均质量分 59
桃子orz
这个作者很懒,什么都没留下…
展开
-
解释器模式
介绍 解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。 类比 现实中的翻译员 应用场景 自定义语法结构的时候需要翻译器 ...原创 2021-03-24 11:04:57 · 95 阅读 · 0 评论 -
模板方法模式
介绍 模板方法模式是一种行为设计模式, 它在超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。 类比 装修, 可以选择一种风格的装修方式, 具体细节需要根据房屋个的格局进行调节 类图 应用场景 当你只希望客户端扩展某个特定算法步骤, 而不是整个算法或其结构时, 可使用模板方法模式。 模板方法将整个算法转换为一系列独立的步骤, 以便子类能对其进行扩展, 同时还可让超类中所定义的结构保持完整。 当多个类的算法除一些细微不同之外几乎完全一样时, 你可使用该模式。 但其后果就原创 2021-03-24 10:26:12 · 92 阅读 · 0 评论 -
备忘录模式
介绍 备忘录模式是一种行为设计模式, 允许在不暴露对象实现细节的情况下保存和恢复对象之前的状态。 类比 玩游戏的时候的存档, 什么都不用关心, 只要点击存档, 就会保存当前游戏进度, 下次可以读取寸档来恢复游戏进度。 类图 1.内部类方式 2.接口实现方式 3.封装更加严格的实现 应用场景 当你需要创建对象状态快照来恢复其之前的状态时, 可以使用备忘录模式。 备忘录模式允许你复制对象中的全部状态 (包括私有成员变量), 并将其独立于对象进行保存。 尽管大部分人因为 “撤销” 这个用例才记得该模式原创 2021-03-24 10:03:53 · 144 阅读 · 0 评论 -
命令模式
介绍 命令模式是一种行为设计模式, 它可将请求转换为一个包含与请求相关的所有信息的独立对象。 该转换让你能根据不同的请求将方法参数化、 延迟请求执行或将其放入队列中, 且能实现可撤销操作。 类比 去饭店点餐, 服务员记下你点的食物, 写在一张纸上。 订单贴在墙上。 过了一段时间, 厨师拿到了订单, 他根据订单来准备食物。 厨师将做好的食物和订单一起放在托盘上。 服务员看到托盘后对订单进行检查, 确保所有食物都是你要的, 然后将食物放到了你的桌上。 那张纸就是一个命令, 它在厨师开始烹饪前一直位于队列中。 命原创 2021-03-23 17:23:34 · 308 阅读 · 0 评论 -
迭代器模式
介绍 迭代器模式是一种行为设计模式, 让你能在不暴露集合底层表现形式 (列表、 栈和树等) 的情况下遍历集合中所有的元素。 类比 无论去哪游玩, 找个向导就ok了, 他会给你安排游玩路线 类图 适用场景 当集合背后为复杂的数据结构, 且你希望对客户端隐藏其复杂性时 (出于使用便利性或安全性的考虑), 可以使用迭代器模式。 迭代器封装了与复杂数据结构进行交互的细节, 为客户端提供多个访问集合元素的简单方法。 这种方式不仅对客户端来说非常方便, 而且能避免客户端在直接与集合交互时执行错误或有害的操作,原创 2021-03-16 17:56:43 · 181 阅读 · 0 评论 -
责任链模式
简介 责任链模式是一种行为设计模式, 允许你将请求沿着处理者链进行发送。 收到请求后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者。 类比 富士康里面的流水线, 每个环节安装不同的零件 类图 伪代码 流水线安装笔记本电脑 interface Worker { Worker next; void work(Computer c); } interface WorkerA { Worker next; void work(Computer c) { pring("安装cpu原创 2021-03-15 21:48:24 · 123 阅读 · 0 评论 -
访问者模式
介绍 访问者模式是一种行为设计模式, 它能将算法与其所作用的对象隔离开来 类图 示例代码 // 元素接口声明了一个`accept(接收)`方法,它会将访问者基础接口作为一个参 // 数。 interface Shape is method move(x, y) method draw() method accept(v: Visitor) // 每个具体元素类都必须以特定方式实现`accept`方法,使其能调用相应元素类的 // 访问者方法。 class Dot implemen原创 2021-03-15 21:32:41 · 185 阅读 · 1 评论 -
中介者模式
定义 用一个中介者对象来封装一系列的对象交互。中介者使得各对象不需要显式地相互引用,从而使其松散耦合,而且可以独立地改变它们之间的交互。 类比 房屋中介, 多个买家, 多个卖家 类图 示例 伪代码 IMeidator { List<ISeller> sellers; public void addSeller(ISeller seller) { sellers.add(seller); } void notify(Stirng str); } Mediator extend原创 2021-03-08 11:11:15 · 151 阅读 · 0 评论 -
观察者模式
定义 观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。 类图 Subject:抽象主题(抽象被观察者),抽象主题角色把所有观察者对象保存在一个集合里,每个主题都可以有任意数量的观察者,抽象主题提供一个接口,可以增加和删除观察者对象。 ConcreteSubject:具体主题(具体被观察者),该角色将有关状态存入具体观原创 2021-03-08 10:29:21 · 112 阅读 · 0 评论 -
状态模式
定义 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。 类图 在享元模式中有如下角色: Context:环境角色,定义客户端需要的接口,并且负责具体状态的切换。 State:抽象状态角色,可以是抽象类或者接口,负责对象状态定义,并封装了环境角色。 ConcreteState:具体状态角色,实现抽象角色类,定义了本状态所要做的事情。 简单实现 拿用mp3听歌来说,mp3有四种基本状态,分别是开机、关机、上一首歌和下一首歌。如果我们要写一个对mp3进行控制的类,你可能会这样写,如下所示原创 2021-03-08 09:43:28 · 169 阅读 · 0 评论 -
策略模式
定义 将算法抽象封装, 可独立于使用它的客户而独立变化。 类比 知己知彼百战不殆, 根据不同的情况指定不同的策略 类图 Context:用来操作策略的上下文环境。 Stragety:策略的抽象。 StragetyA、StragetyB:具体的策略实现。 简单实现 这回我们还举武侠的例子,张无忌作为一个大侠会遇到很多的对手,如果每遇到一个对手都用自己最厉害的武功去应战这显然是不明智的,于是张无忌想出了三种应战的策略分别对付三个实力层次的对手。 定义策略接口 策略接口有一个fighting的方法用于战斗: p原创 2021-03-08 09:36:00 · 119 阅读 · 0 评论 -
适配器模式
介绍 适配器模式是一种结构型设计模式, 它能使接口不兼容的对象能够相互合作。 类比 服务端数据源可能是xml活json, 通过不同的适配器来解析数据 电源插口可能有两口或三口, 通过不同的插头转换为usb插口 类图 总结 适配器模式还是比较好理解的, 就是抽象出来一个中间层用来接口或数据的统一 ...原创 2021-03-07 20:15:04 · 115 阅读 · 0 评论 -
桥接模式
简介 桥接模式属于结构型的一种, 可将一个大类或一系列紧密相关的类拆分为抽象和实现两个独立的层次结构, 从而能在开发时分别使用。 类比 一体机和组装台式机, 一体机封闭的无法更换硬件, 组装台式机只要接口类型符合就可随意更换cpu/内存等。 类图 总结 看桥接模式的简介感觉有点懵, 翻译过来就是将整体拆分成抽象接口, 就像上面的例子一样, 定义好不同硬件的插口, 更方便更换硬件。 ...原创 2021-03-07 19:57:53 · 128 阅读 · 0 评论 -
组合模式
简介 可以使用它将对象组合成树状结构, 并且能像使用独立对象一样使用它们。 场景 公司职级架构 AndroidView 架构 类图 示例代码(伪代码) 以android view体系来说明 public abstract class View { void draw(); } public class TextView extentds { public void draw() { System.out.print("im TextView"); } } public clas原创 2021-03-07 16:56:02 · 100 阅读 · 0 评论 -
装饰模式
介绍 装饰模式属于结构型设计模式之一。 在不改变类文件和使用继承的前提下,动态地扩展一个对象的功能。 是继承的替代方案之一。它是通过创建一个包装对象,来装饰包裹真实的对象。 定义 动态地扩展对象功能,比生成子类更为灵活。 类图 示例 装饰模式在现实生活中有很多例子,比如给一个人穿上各种衣服,给一幅画涂色上框等等,这次我要举得例子有些不同,举一个武侠修炼武功的例子:杨过本身就会全真剑法,有两位武学前辈洪七公和欧阳锋分别传授杨过打狗棒法和蛤蟆功,这样杨过除了会全真剑法还会打狗棒法和蛤蟆功。 抽象组件(Comp原创 2021-03-06 11:40:20 · 189 阅读 · 0 评论 -
享元模式
定义 使用共享对象有效的支持大量细粒度的对象 介绍 享元模式是结构型设计模式的一种,是池技术的重要实现方式,它可以减少应用程序创建的对象,降低程序内存的占用,提高程序的性能。 要求细粒度对象,那么不可避免地使得对象数量多且性质相近,这些对象分为两个部分:内部状态和外部状态。内部状态是对象可共享出来的信息,存储在享元对象内部并且不会随环境的改变而改变。而外部状态是对象依赖的一个标记是随环境改变而改变的并且不可共享的状态。 示例 抽象享元角色 抽象享元角色是一个商品接口,它定义了showGoodsPrice方法原创 2021-02-22 22:15:05 · 124 阅读 · 0 评论 -
外观模式
定义 为系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得子系统更加容易使用。 简介 当我们开发Android的时候,无论是做SDK还是封装API,我们大多都会用到外观模式,它通过一个外观类使得整个系统的结构只有一个统一的高层接口,这样能降低用户的使用成本。 示例 举一个武侠的例子,我们把武侠张无忌当作一个系统,他作为一个武侠,他本身分为三个系统分别是招式、内功和经脉。 子系统类(Subsystem) 我们知道张无忌的三个系统分别是招式、内功和经脉。那我们来创建它们: /** * 子原创 2021-02-22 21:50:39 · 156 阅读 · 0 评论 -
代理模式
定义 为其他对象提供一种代理以控制这个对象的访问 介绍 代理模式也叫委托模式,是结构型设计模式的一种。在现实生活中我们用到类似代理模式的场景有很多,比如代购、代理上网、打官司等。 类图 示例 假设找代购购买商品。 抽象主题类(Subject) 抽象主题类具有真实主题类和代理的共同接口方法,我想要代购,那共同的方法就是购买: public interface IShop { //购买 void buy(); } 真实主题类(RealSubject) 这个购买者Mark也就是我,实现了ISh原创 2021-02-22 21:40:59 · 145 阅读 · 0 评论 -
原型模式
定义 用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。 示例 原型模式的核心是clone方法,通过该方法进行拷贝,这里举一个名片拷贝的例子。 现在已经流行电子名片了,只要扫一下就可以将名片拷贝到自己的名片库中, 我们先实现名片类。 具体的原型类 public class BusinessCard implements Cloneable { private String name; private String company; public BusinessCard(原创 2021-02-20 19:02:36 · 142 阅读 · 0 评论 -
建造模式
定义 建造者模式(builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 简介 建造者模式(builder)是创建一个复杂对象的创建型模式,将构建复杂对象的过程和它的部件解耦,使得构建过程和部件的表示分离开来。 例如我们要DIY一个台式机电脑,我们找到DIY商家,我们可以要求这台电脑的cpu或者主板或者其他的部件都是什么牌子的什么配置的,这些部件是我们可以根据我们的需求来变化的,但是这些部件组装成电脑的过程是一样的,我们不需要知道这些部件是怎样组装成电脑的,我们只需要提原创 2021-02-20 18:18:41 · 269 阅读 · 1 评论 -
工厂模式(简单,方法,抽象)
简单工厂 定义 简单工厂模式属于创建型模式又叫做静态工厂方法模式,是由一个工厂对象决定创建出哪一种产品类的实例。 类图 示例代码 //抽象产品 abstract class AbatractProduct { public abstract void printName(); } //产品A class ProductA extends AbatractProduct { public void printName() { System.out.println("ProductA"); } }原创 2021-02-19 16:50:19 · 137 阅读 · 0 评论 -
单例模式
定义 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 1. 饿汉模式 public class Singleton { private static Singleton instance = new Singleton(); private Singleton (){ } public static Singleton getInstance() { return instance; }原创 2021-02-18 15:23:18 · 159 阅读 · 0 评论 -
面向对象设计七大原则
简述 原则都是前人总结出来的经验,遵循这些原则,让我们开发的程序更加健壮易维护。七大原则之间并不是相互孤立的,彼此间存在着一定关联,一个可以是另一个原则的加强或是基础。违反其中的某一个,可能同时违反了其余的原则。开闭原则是面向对象的可复用设计的基石。其他设计原则是实现开闭原则的手段和工具。一般地,可以把这七个原则分成了以下两个部分: 设计目标: 开闭原则、里氏代换原则、迪米特原则 设计方法: 单一职责原则、接口分隔原则、依赖倒置原则、组合/聚合复用原则 1. 单一职责原则(SRP) 定义: 所谓一个类的一个原创 2021-02-18 14:25:00 · 1255 阅读 · 0 评论