设计模式
文章平均质量分 83
设计模式
贺兰猪
这个作者很懒,什么都没留下…
展开
-
组合模式(Composite Pattern)
组合模式原创 2022-07-29 11:46:18 · 138 阅读 · 0 评论 -
解释器模式
定义数值解析器用来解析变量(根据变量名来获取其值),定义加法解释器来解释加法(利用数值解析器解析两个变量的值,将它们的数值相加),定义减法解释器来解释减法(和加法解释器类似)。可以定义一个值解释器,它用来解释变量a和变量b的值,定义一个加法解释器,它用来解释a+b,即先通过值表达式解释变量a和变量b的值,然后将它们相加。解释器模式就是为不同的语法设置不同的解释器,让后利用解释器来计算表达式的值或解释表达式的含义,关键在于如何实现解释器。代表的是计算器,利用解释器来计算表达式的结果。......转载 2022-07-26 18:16:01 · 270 阅读 · 0 评论 -
状态(State)模式
状态模式原创 2022-07-20 21:15:39 · 327 阅读 · 0 评论 -
桥接(Bridge)模式
某些类具有两个或多个维度的变化,如图形既可按形状分,又可按颜色分。如果用继承方式,m 种形状和 n 种颜色的图形就有 m×n 种,不但对应的子类很多,而且扩展困难如果能根据实际需要对形状和颜色进行组合。 则来进行设计系统中类的个数更少,且系统扩展更为方便。这种方式即桥接模式。桥接模式将继承关系转换为关联关系,从而降低了类与类之间的耦合,减少了代码编写量。桥接模式的定义如下:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。..原创 2020-12-29 20:13:50 · 842 阅读 · 0 评论 -
责任链模式
看到C语言中文网写得很通俗易懂的博文,Mark一下,又要偷懒转载了 =。+,附上链接http://c.biancheng.net/view/1383.html在现实生活中,一个事件需要经过多个对象处理是很常见的场景。例如,采购审批流程、请假流程等。公司员工请假,可批假的领导有部门负责人、副总经理、总经理等,但每个领导能批准的天数不同,员工必须根据需要请假的天数去找不同的领导签名,也就是说员工必须记住每个领导的姓名、电话和地址等信息,这无疑增加了难度。定义:为了避免请求发送者与多个请求处理者耦合在一.转载 2021-01-02 23:04:41 · 111 阅读 · 0 评论 -
观察者(Observer)模式
在现实世界中,许多对象并不是独立存在的,其中一个对象的行为发生改变可能会导致一个或者多个其他对象的行为也发生改变。例如,某种商品的物价上涨时会导致部分商家高兴,而消费者伤心;当我们开车到交叉路口时,遇到红灯会停,遇到绿灯会行。同样,在软件世界也是这样,例如,Excel 中的数据与折线图、饼状图、柱状图之间的关系;事件模型中的事件源与事件处理者。所有这些,如果用观察者模式来实现就非常方便。定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式原创 2021-01-02 16:14:26 · 168 阅读 · 1 评论 -
代理模式
公司通过银行代理给员工发工资;购买火车票可以通过支付宝或者火车票代售点买,而不非要去火车站等...定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。主要优点有:代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用; 代理对象可以扩展目标对象的功能; 代理模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度,增加了程序的可扩展性主要缺点是:代理模式会造成系统设计中类的数原创 2021-01-01 17:38:20 · 138 阅读 · 0 评论 -
策略(Strategy)模式
在现实生活中常常遇到实现某种目标存在多种策略可供选择的情况,例如,出行旅游可以乘坐飞机、乘坐火车、骑自行车或自己开私家车等,超市促销可以釆用打折、送商品、送积分等方法。在软件开发中也常常遇到类似的情况,当实现某一个功能存在多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能,如数据排序策略有冒泡排序、选择排序、插入排序、二叉树排序等。如果使用多重条件转移语句实现(即硬编码),不但使条件语句变得很复杂,而且增加、删除或更换算法要修改原代码,不易维护,违背开闭原则。如果采用策略模式原创 2020-12-31 16:05:58 · 289 阅读 · 0 评论 -
装饰(Decorator)模式
在现实生活中,常常需要对现有产品增加新的功能或美化其外观,如房子装修、相片加相框等,都是装饰器模式。在软件开发过程中,有时想用一些现存的组件。这些组件可能只是完成了一些核心功能。但在不改变其结构的情况下,可以动态地扩展其功能。所有这些都可以釆用装饰模式来实现。装饰模式的定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式。使用场景:需要透明且动态地扩展类的功能时。主要优点:装饰器是继承的有力补充,比继承灵活,在不改变原有对象的情况下,动态的给一个对象扩原创 2020-12-30 17:04:16 · 111 阅读 · 0 评论 -
适配器(Adapter)模式
定义: 适配器模式将某个类的接口转换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。目的是消除由于接口不匹配所造成的类的兼容性问题。其别名为包装器(Wrapper)。适配器模式可分为对象适配器和类适配器两种,在对象适配器模式中,适配器与适配者之间是关联关系;在类适配器模式中,适配器与适配者之间是继承(或实现)关系。使用场景:系统需要使用现有的类,而此类的接口不符合系统的需要,即接口不兼容; 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的类,原创 2020-12-30 15:22:28 · 705 阅读 · 1 评论 -
原型(Prototype)模式
原型模式原创 2020-12-29 10:52:30 · 370 阅读 · 0 评论 -
建造者(Builder)模式
建造者模式原创 2020-12-28 15:47:23 · 206 阅读 · 0 评论 -
抽象工厂模式
工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。因为抽象工厂不太好理解,我们先看看图,然后就和代码,就比较容易理解。请看例子:public interface Sender { public void Send();}两个实现类:public class转载 2020-12-27 17:44:17 · 120 阅读 · 0 评论 -
工厂方法模式
设计模式系列在学习并写成博客的过程中均参考https://blog.csdn.net/zhangerqing/article/details/8194653工厂方法模式分为三种:1、普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。首先看下关系图:举例如下:(我们举一个发送邮件和短信的例子)首先,创建二者的共同接口:public interface Sender { public void Send();}其次,创建实现类:public原创 2020-12-27 12:02:45 · 377 阅读 · 0 评论 -
面向对象的六大原则
面向对象的语言有三大特点:继承、封装、多态。六大原则:单一职责原则——SRP 开闭原则——OCP 里式替换原则——LSP 依赖倒置原则——DIP 接口隔离原则——ISP 迪米特原则——LOD单一职责原则:就一个类而言,应该仅有一个引发它变化的原因。简单来说,一个类中应该是一组相关性很高的函数、数据的封装。可以降低类的复杂度,一个类只负责一项职责,这样逻辑也简单很多。 提高...原创 2019-09-15 18:44:09 · 138 阅读 · 0 评论 -
设计模式——单例模式
单例模式的定义:确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。使用场景:确保某个类有且只有一个对象的场景,避免产生多个对象消耗过多的资源,或者某种类型的对象只应该有且只有一个。例如,创建一个对象需要消耗的资源过多,如要访问IO和数据库等资源,这时就要考虑使用单例模式。要实现单例模式的几个关键点:构造函数不对外开放,一般为Private; 通过一个静态方法或者枚举返回...原创 2019-07-24 09:52:55 · 109 阅读 · 0 评论