![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
23种设计模式
文章平均质量分 75
编程菜鸟到老鸟的必经之路,23三种设计模式你肯定绕不开!
豆芽暴走了
知行合一
展开
-
命令模式 行为型模式之一
(Command Pattern)又叫动作模式或事务模式。指的是将一个请求封装成一个对象,使发出请求的责任和执行请求的责任分割开,然后可以使用不同的请求把客户端参数化,这样可以使得两者之间通过命令对象进行沟通,从而方便将命令对象进行储存、传递、调用、增加与管理。命令模式是一种对象行为型模式。命令模式就是对命令的封装,就是把一系列的操作写到一个方法中,然后供客户端调用就行了。原创 2023-09-24 15:38:46 · 56 阅读 · 0 评论 -
策略模式 行为型模式之三
策略模式(Strategy Design Pattern),定义一堆算法类,并将每个算法分别封装起来,让它们可以互相替换,被封装起来的算法具有独立性外部不可改变其特性。原创 2023-09-24 16:45:10 · 42 阅读 · 0 评论 -
模板方法模式 行为型模式之二
抽象模板类,负责给出一个算法的轮廓和骨架。它由一个模板方法和若干个基本方法构成。模板方法:定义了一套算法的骨架,按某种顺序调用其包含的基本方法。基本方法:是算法骨架/流程的某些步骤进行具体实现,包含以下几种类型,抽象方法:在抽象类中声明,由具体子类实现。具体方法:在抽象类中已经实现,在具体子类中可以继承或重写它。钩子方法:在抽象类中已经实现,包括用于判断的逻辑方法和需要子类重写的空方法两种。原创 2023-09-24 16:03:20 · 52 阅读 · 0 评论 -
中介者模式 行为型模式之四
用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理。多个类相互耦合,形成了网状结构。将上述网状结构分离为星型结构。对象 Colleague 之间的通信封装到一个类中单独处理。1、中国加入 WTO 之前是各个国家相互贸易,结构复杂,现在是各个国家通过 WTO 来互相贸易。2、机场调度系统。原创 2023-09-24 17:35:12 · 46 阅读 · 0 评论 -
原型模式 创建型模式之二
DP书上的定义为:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。其中有一个词很重要,那就是拷贝(既clone)。可以说,拷贝(clone)是原型模式的精髓所在。其中拷贝分为深拷贝和浅拷贝。被复制的对象的所有变量都含有与原来的对象相同的值,而所有对其他对象的引用都仍然指向原来的对象。把引用对象的变量指向复制过的新对象,而不是原有的被引用的对象。Clone的时候使用深复制。原创 2023-09-25 18:55:50 · 480 阅读 · 0 评论 -
主动对象模式
代理者被调用的时候会创建具体“调用请求”对象,对象中包含了执行这个方法必须的参数和数据的返回方式。对应的执行者的方法将被调用。对象分为主动对象和被动对象,主动对象内部包含一个线程,可以自动完成动作或改变状态,而一般的被动对象只能通过被其他对象调用才有所作为。调度的决定可能决定与多个规则:关键字顺序,入队的顺序,要满足的执行条件或等待发生的事件,如:在一个数据结构中出现空闲区。总的来说,主动对象模式的主要优点是能够提高系统的并发性,从而提高系统的吞吐率,适合于需要进行多线程处理和并发访问同一资源的场景。原创 2023-09-24 15:01:19 · 70 阅读 · 0 评论 -
外观模式 结构型模式之一
无论是“门”还是“面”,指代的都是某系统的外观部分,也就是与外界接触的临界面或接口,所以门面模式常常也被翻译为“外观模式”。利用门面模式,我们可以把多个子系统“关”在门里面隐藏起来,成为一个整合在一起的大系统,来自外部的访问只需通过这道“门面”(接口)来进行,而不必再关心门面背后隐藏的子系统及其如何运转。门面模式(Facade)可能是最简单的结构型设计模式,它能将多个不同的子系统接口封装起来,并对外提供统一的高层接口,使复杂的子系统变得更易使用。说白了就是为复杂的系统做一个统一的调用接口。原创 2023-09-24 17:24:28 · 100 阅读 · 0 评论 -
适配器模式 结构性模式之五
适配器模式是一种结构型的软件设计模式,也称包装模式,即将相对复杂的功能(可能用到多个类)封装起来,提供一个使用者想要的接口,使用者只需要调用接口,不需要知道接口里封装的内容是如何实现的。比如在面对一些第三方库或者SDK开发时,它们的接口往往与我们自己想要的接口不一致,此时适配器模式可以很好地扮演一个接口转换器的角色,将别人的接口与我们的接口对应上。原创 2023-09-28 14:51:06 · 400 阅读 · 0 评论 -
状态模式 行为型模式之六
允许一个对象在其对象内部状态改变时改变它的行为。原创 2023-10-07 13:26:37 · 574 阅读 · 0 评论 -
建造者模式 创建型模式之三
想要搞清楚建造者模式,首先先要了解建造者模式种四个角色的定位。原创 2023-09-25 19:50:00 · 247 阅读 · 0 评论 -
抽象工厂模式 创建性模式之五
抽象工厂模式是什么呢,抽象工厂模式让一个具体的工厂可以生产多类的产品,也就是它从工厂方法模式种的一厂一产品,变成了一厂多产品的模式。有朋友问了,简单工厂模式不就是一厂多产品么,没错聪明的你发现了问题。但是简单工厂模式,它只有一个唯一的厂。而抽象工厂模式,却可以根据基类的抽象工厂,派生出N多个厂,这就是其本质的区别。原创 2023-09-28 09:57:46 · 326 阅读 · 0 评论 -
装饰模式 结构性模式之三
通过采用组合而非继承的手法, Decorator模式实现了在运行时 动态扩展对象功能的能力,而且可以根据需要扩展多个功能。避免 了使用继承带来的“灵活性差”和“多子类衍生问题”Decorator类在接口上表现为is-a Component的继承关系,即 Decorator类继承了Component类所具有的接口。但在实现上又 表现为has-a Component的组合关系,即Decorator类又使用了 另外一个Component类。原创 2023-09-28 13:12:51 · 74 阅读 · 0 评论 -
桥接模式 结构型模式之二
将抽象与实现分离,使它们可以独立变化。原创 2023-09-26 15:43:06 · 257 阅读 · 0 评论 -
设计模式的六大原则
设计模式的提出都是为了解决一个常见的问题而总结出来的办法。所以当你思考采用何种设计模式的时候,你应该先问问自己当前问题的是什么?根据问题去选取合适的设计模式。等你熟悉了设计模式的以后,你会发现部分设计模式之间存在包含关系,甚至很相像,但是不同的设计模式解决的问题是不一样的。当我们在设计一个模块的时候可以从以下几个角度去考虑:这个模块与其他模块的关系是什么样的?模块中哪些部分是不变的,哪些部分是在不断变化的,是如何变化的?类与类之间的关系是怎么样的,为什么需要依赖,怎么可以不依赖?要不要加一个接口。原创 2023-09-27 10:23:04 · 222 阅读 · 0 评论 -
单例模式 创建型模式之一
一句话来说就是,某个类只能有一个实例,提供一个全局的访问点。单例模式的要点有三个:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。原创 2023-09-26 14:11:58 · 392 阅读 · 0 评论 -
代理模式 结构型模式之四
代理模式是一种常见的设计模式,它允许你在不直接访问对象的情况下,通过一个代理对象来控制对该对象的访问。这个代理对象可以作为客户端和实际对象之间的中介,从而实现一些特定的控制功能,比如限制访问、记录访问日志等。怎么理解呢,我们一般来说存在一个实际的对象,这个对象包含了丰富的业务方法,我们当然可以暴露出来给所有人使用。但是有时候我们并不希望这些方法没没有限制的使用,比如某个方法是重启服务器。如果这个方法不加约束的暴露给所有人,那将会是一场灾难。原创 2023-09-28 14:24:43 · 439 阅读 · 0 评论 -
访问者模式 行为型设计模式之九
在不改变数据结构的前提下,增加作用于一组对象元素的新功能。原创 2023-10-07 14:27:13 · 360 阅读 · 0 评论 -
亨元模式 结构型模式之六
享元模式是一种结构型设计模式, 它允许你在消耗少量内存的情况下支持大量对象。原创 2023-10-05 15:10:32 · 92 阅读 · 0 评论 -
责任链模式 行为型设计模式之十
使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象能够处理它为止。发送请求的客户端并不知道链上的哪个对象会处理这个请求,这使得系统在不影响客户端的情况下动态的组织和分配责任。纯的责任链模式一个纯的职责链模式要求一个具体处理者对象只能在两个行为中选择一个:要么承担全部责任,要么将责任推给下家,不允许出现某一个具体处理者对象在承担了一部分或全部责任后又将责任向下传递的情况。原创 2023-10-07 14:43:51 · 339 阅读 · 0 评论 -
工厂方法模式 创建型模式之四
工厂方法模式定义一个创建对象的接口,让子类决定实例化那个类,也就是让类的实例化推迟到子类中进行。因为当需要增加一个新的产品时,我们需要增加一个具体的产品类和与之对应的具体子工厂,然后在具体子工厂方法中进行对象实例化,所以称为工厂方法模式。这个模式非常符合“开闭原则”,当需要增加一个新的产品时,我们只需要增加一个具体的产品类和与之对应的具体工厂即可,无须修改原有系统。同时在工厂方法模式中用户只需要知道生产产品的具体工厂即可,无须关系产品的创建过程,甚至连具体的产品类名称都不需要知道。原创 2023-09-26 15:04:40 · 207 阅读 · 0 评论 -
解释器模式 行为型模式之五
给定一个语言,定义它的文法的一种表示,并定义一个解释器。比如加减乘除在代码里是一种表示,我们需要翻译成可以阅读的数学公式,并且可以供用户输入数字得到输出结果。原创 2023-10-07 11:43:38 · 240 阅读 · 0 评论 -
简单工厂模式 创建型模式(非GoF经典设计模式)
简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。原创 2023-09-26 14:30:37 · 310 阅读 · 0 评论 -
迭代器模式 行为型模式之十一
一种遍历访问聚合对象中各个元素的方法,不暴露该对象的内部结构。需要说明的是迭代器模式在C++ STL已经集成,可以直接使用。原创 2023-10-07 14:50:09 · 47 阅读 · 0 评论 -
备忘录模式 行为型模式之八
备忘录模式是一种行为型的,在不破坏封装的前提下,获取一个对象的内部状态,并在对象外保存该状态,当对象需要恢复到该状态时,对其进行恢复。原创 2023-10-07 14:08:09 · 296 阅读 · 0 评论 -
观察者模式 行为型设计模式之七
在GOF的《设计模式:可复用面向对象软件的基础》一书中对观察者模式是这样定义的:定义对象的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。当一个对象发生了变化,关注它的对象就会得到通知;这种交互也成为发布-订阅(publish-subscribe)。原创 2023-10-07 13:42:09 · 355 阅读 · 0 评论