设计模式
文章平均质量分 79
设计模式的介绍与学习
风吹千里
潜心一技、做到极致。
展开
-
22、设计模式之解释器模式
给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。对于一些固定文法构建一个解释句子的解释器。如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。构建语法树,定义终结符与非终结符。构建环境类,包含解释器之外的一些全局信息,一般是 HashMap。编译器、运算表达式计算。可扩展性比较好,灵活。增加了新的解释表达式的方式。易于实现简单文法。原创 2024-05-26 08:06:49 · 455 阅读 · 0 评论 -
21、设计模式之模板方法模式
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。一些方法通用,却在每一个子类都重新写了这一方法。有一些通用的方法。将这些通用算法抽象出来。在抽象类实现,其他步骤在子类实现。在造房子的时候,地基、走线、水管都一样,只有在建筑的后期才有加壁橱加栅栏等差异。西游记里面菩萨定好的 81 难,这就是一个顶层的逻辑骨架。原创 2024-05-25 07:08:43 · 452 阅读 · 0 评论 -
20、设计模式之备忘录模式
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。很多时候我们总是需要记录一个对象的内部状态,这样做的目的就是为了允许用户取消不确定或者错误的操作,能够恢复到他原先的状态,使得他有"后悔药"可吃。通过一个备忘录类专门存储对象状态。客户不与备忘录类耦合,与备忘录管理类耦合。打游戏时的存档。Windows 里的 ctrl + z。浏览器中的后退。原创 2024-05-25 07:08:02 · 552 阅读 · 0 评论 -
19、设计模式之命令模式
将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。在某些场合,比如要对行为进行"记录、撤销/重做、事务"等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将"行为请求者"与"行为实现者"解耦?将一组行为抽象为对象,可以实现二者之间的松耦合。通过调用者调用接受者执行命令,顺序:调用者→命令→接受者。原创 2024-05-24 14:27:57 · 545 阅读 · 0 评论 -
18、设计模式之状态模式
允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为。代码中包含大量与对象状态有关的条件语句。将各种具体的状态类抽象出来。通常命令模式的接口中只有一个方法。而状态模式的接口中有一个或者多个方法。而且,状态模式的实现类的方法,一般返回值,或者是改变实例变量的值。也就是说,状态模式一般和对象的状态有关。实现类的方法有不同的功能,覆盖接口中的方法。状态模式和命令模式一样,也可以用于消除 if…else 等条件选择语句。原创 2024-05-24 14:27:18 · 407 阅读 · 0 评论 -
17、设计模式之策略模式
在策略模式定义了一系列算法或策略,并将每个算法封装在独立的类中,使得它们可以互相替换。通过使用策略模式,可以在运行时根据需要选择不同的算法,而不需要修改客户端代码。原创 2024-05-23 08:47:50 · 355 阅读 · 0 评论 -
16、设计模式之迭代器模式
提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。不同的方式来遍历整个整合对象。遍历一个聚合对象。把在元素之间游走的责任交给迭代器,而不是聚合对象。定义接口:hasNext, next。** 应用实例:** JDK中Collectoin的 iterator。它支持以不同的方式遍历一个聚合对象。迭代器简化了聚合类。在同一个聚合上可以有多个遍历。在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。原创 2024-05-23 08:46:19 · 398 阅读 · 0 评论 -
15、设计模式之责任链模式
避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了。在处理消息的时候以过滤很多道。拦截的类都实现统一接口。Handler 里面聚合它自己,在 HandlerRequest 里判断是否合适,如果没达到条件则向下传递,向谁传递之前 set 进去。JS 中的事件冒泡。原创 2024-05-22 09:38:49 · 619 阅读 · 0 评论 -
14、设计模式之访问者模式
主要将数据结构与数据操作分离。稳定的数据结构和易变的操作耦合问题。需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免让这些操作"污染"这些对象的类,使用访问者模式将这些封装到类中。在被访问的类里面加一个对外提供接待访问者的接口。在数据基础类里面有一个方法接受访问者,将自身引用传入访问者。您在朋友家做客,您是访问者,朋友接受您的访问,您通过朋友的描述,然后对朋友的描述做出一个判断,这就是访问者模式。符合单一职责原则。优秀的扩展性。灵活性。具体元素对访问者公布细节,违反了迪米特原则。原创 2024-05-22 09:37:20 · 486 阅读 · 0 评论 -
13、设计模式之观察者模式
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知。使用面向对象技术,可以将这种依赖关系弱化。在抽象类里有一个 ArrayList 存放观察者们。拍卖的时候,拍卖师观察最高标价,然后通知给其他竞价者竞价。1、观察者和被观察者是抽象耦合的。2、建立一套触发机制。原创 2024-05-21 08:52:03 · 925 阅读 · 0 评论 -
12、设计模式之组合模式
将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。您想表示对象的部分-整体层次结构(树形结构)。您希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。树枝和叶子实现统一接口,树枝内部组合该接口。树枝内部组合该接口,并且含有内部属性 List,里面放 Component。原创 2024-05-21 08:47:21 · 226 阅读 · 0 评论 -
10、设计模式之享元模式
运用共享技术有效地支持大量细粒度的对象。在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。1、系统中有大量对象。2、这些对象消耗大量内存。3、这些对象的状态大部分可以外部化。4、这些对象可以按照内蕴状态分为很多组,当把外蕴对象从对象中剔除出来时,每一组对象都可以用一个对象来代替。5、系统不依赖于这些对象身份,这些对象是不可分辨的。用唯一标识码判断,如果在内存中有,则返回这个唯一标识码所标识的对象。原创 2024-05-21 08:46:07 · 665 阅读 · 0 评论 -
11、设计模式之外观模式
为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。降低访问复杂系统的内部子系统时的复杂度,简化客户端之间的接口。1、客户端不需要知道系统内部的复杂联系,整个系统只需提供一个"接待员"即可。2、定义系统的入口。客户端不与系统耦合,外观类与系统耦合。在客户端和复杂系统之间再加一层,这一层将调用顺序、依赖关系等处理好。1、去医院看病,可能要去挂号、门诊、划价、取药,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理,就很方便。原创 2024-05-20 09:00:43 · 512 阅读 · 0 评论 -
9、设计模式之中介者模式
中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。原创 2024-05-20 08:37:50 · 129 阅读 · 0 评论 -
8、设计模式之装饰模式
动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。一般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀。在不想增加很多子类的情况下扩展类。将具体功能职责划分,同时继承装饰者模式。Component 类充当抽象角色,不应该具体实现。修饰类引用和继承 Component 类,具体扩展类重写父类方法。装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。原创 2024-05-19 08:03:12 · 1011 阅读 · 0 评论 -
7、设计模式之代理模式
在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。原创 2024-05-19 07:58:07 · 1051 阅读 · 0 评论 -
6、设计模式之桥接模式
分离抽象实现: 将抽象部分与它的具体实现部分分离,使它们都可以独立的变化;独立的变化 就是 在一定程度上 进行解耦;组合方式: 通过组合的方式建立两个类之间的联系, 而不是继承;桥接模式类型: 结构型;桥接模式 相当于 使用桥梁 将两侧连接起来 , 这里指的是 使用桥梁 连接两个类 , 在两个类之间建立某种联系 , 可以通过继承 , 也可以通过组合 , 桥接模式 是采用 组合的方式 , 建立两个类之间的关系;合成复用原则 , 推荐优先使用组合 , 不是继承;原创 2024-05-18 16:51:44 · 880 阅读 · 0 评论 -
5、设计模式之适配器模式/原型模式
有动机地修改一个正常运行的系统的接口,这时应该考虑使用适配器模式。原型模式原创 2024-05-18 09:03:28 · 497 阅读 · 0 评论 -
4、设计模式之工厂模式
简单工厂:唯一工厂类,一个产品抽象类,工厂类的创建方法依据入参判断并创建具体产品对象。工厂方法:多个工厂类,一个产品抽象类,利用多态创建不同的产品对象,避免了大量的if-else判断。抽象工厂:多个工厂类,多个产品抽象类,产品子类分组,同一个工厂实现类创建同组中的不同产品,减少了工厂子类的数量。原创 2024-05-17 23:14:09 · 349 阅读 · 0 评论 -
3、设计模式之建造者模式
建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。原创 2024-05-17 17:22:35 · 158 阅读 · 0 评论 -
2、设计模式之单例模式
设计模式之单例模式:饿汉式、懒汉式、枚举类、静态内部类、双重校验锁等实现方式原创 2024-05-17 11:13:26 · 881 阅读 · 0 评论 -
1、设计模式之设计原则
软件模式是在软件开发中某些可重现问题的一些有效解决方法,软件模式的基础结构主要由四部分构成,包括问题描述【待解决的问题是什么】、前提条件【在何种环境或约束条件下使用】、解法【如何解决】和效果【有哪些优缺点】,如图所示:设计模式共分为6种原则、24种模式单一职责原则开放-封闭原则依赖倒转原则里氏转换原则迪米特法则合成/聚合复用原则接口隔离原则设计原则名称定义单一职责原则(Single Responsibility Principle, SRP)原创 2024-05-16 15:42:30 · 964 阅读 · 0 评论