![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
不随意的风
世界上并没有完美的程序,但我们并不因此而沮丧,因为写程序本来就是一个不断追求完美的过程。
展开
-
由一个单例模式引发的思考-holder类方式
最近在看《Java并发编程实践》,里面提到了一种实现单例模式的方式,并大致说明了机制,但仍不是很清晰,今日有空,查阅相关书籍,尝试解释其中道理。原创 2023-10-29 16:15:37 · 432 阅读 · 0 评论 -
设计模式-访问者模式
表示要在对象结构的元素上执行的操作。访问者可让你定义新操作,而无需更改其所操作元素的类。在面向对象的程序设计和软件工程中,访问者设计模式是一种将算法与操作对象的结构分离的方法。这种分离的实际结果是能够在不修改结构的情况下向现有对象结构添加新操作。考虑有一个带有军队单位的树形结构。指挥官下有两名中士,每名中士下有三名士兵。基于这个层级结构实现访问者模式,我们可以轻松创建与指挥官,中士,士兵或所有人员互动的新对象。1.定义单位和单位访问器类型。3.定义具体的访问者。原创 2023-02-07 08:36:58 · 87 阅读 · 0 评论 -
设计模式-模板方法模式
偷东西的一般步骤是相同的。首先,选择目标,然后以某种方式使其迷惑,最后,你偷走了该物品。然而这些步骤有很多实现方式。在一个操作中定义算法的骨架,将某些步骤推迟到子类。模板方法允许子类重新定义算法的某些步骤,而无需更改算法的结构。2.定义不同的方法子类实现。原创 2023-02-03 14:10:53 · 68 阅读 · 0 评论 -
设计模式-策略模式
定义一个家族算法,并封装好其中每一个,使它们可以互相替换。策略模式使算法的变化独立于使用它的客户。策略模式允许在运行时选择最匹配的算法。屠龙是一项危险的职业。有经验将会使它变得简单。经验丰富的屠龙者对不同类型的龙有不同的战斗策略。lambda策略实现。原创 2023-02-02 11:13:21 · 61 阅读 · 0 评论 -
设计模式-对象状态模式
目的:允许对象在内部状态改变时改变它的行为。对象看起来好像修改了它的类。状态模式是一种允许对象在内部状态改变时改变它的行为的行为型设计模式。这种模式接近于有限状态机的概念。状态模式可以被理解为策略模式,它能够通过调用在模式接口中定义的方法来切换策略。程序示例:当在长毛象的自然栖息地观察长毛象时,似乎它会根据情况来改变自己的行为。它开始可能很平静但是随着时间推移当它检测到威胁时它会对周围的环境感到愤怒和危险。1.定义状态和不同的实现类2.定义猛犸象类3.测试输出类图:原创 2023-02-01 11:21:17 · 85 阅读 · 0 评论 -
设计模式-代理模式
想象有一个塔,当地的巫师去那里学习他们的法术。象牙塔只能够通过代理来进入以此来保证只有首先3个巫师才能进入。这里的代理就代表的塔的功能并添加访问控制。为另一个对象提供代理或占位符以控制对其的访问。使用代理模式,一个类代表另一个类的功能。1.巫师类和巫师塔接口与实现。原创 2023-01-31 09:26:47 · 77 阅读 · 0 评论 -
设计模式-观察者模式
在遥远的土地上生活着霍比特人和兽人的种族。他们都是户外生活的人所以他们密切关注天气的变化。可以说他们不断地关注着天气。定义一种一对多的对象依赖关系这样当一个对象改变状态时,所有依赖它的对象都将自动通知或更新。1.定义天气类型合观察者接口。2.实现各种的观察者。原创 2023-01-30 16:24:03 · 64 阅读 · 0 评论 -
设计模式-工厂方法模式
为创建一个对象定义一个接口,但是让子类决定实例化哪个类。工厂方法允许类将实例化延迟到子类。精灵需要精灵武器,而兽人需要兽人武器。根据客户来召唤正确类型的铁匠。原创 2023-01-12 16:19:40 · 76 阅读 · 0 评论 -
设计模式-Factory Kit
使用分离的构建器和工厂接口来定义一个不可变内容的工厂。原创 2023-01-09 17:50:13 · 131 阅读 · 0 评论 -
设计模式-简单工厂
在工厂类中提供一个封装的静态工厂方法,用于隐藏对象初始化细节,使客户端代码可以专注于使用,而不用关心类的初始化过程。工厂类是一个用于创建其他对象的对象 -- 从形式上看,工厂方法是一个用于返回不同原型或类型的函数或方法。原创 2023-01-09 16:50:31 · 78 阅读 · 0 评论 -
设计模式-门面模式
一个金矿是怎么工作的?“嗯,矿工下去然后挖金子!这是你所相信的,因为你在使用一个金矿对外提供的一个简单接口,在内部它要却要做很多事情。这个简单的接口对复杂的子系统来说就是一个外观。为一个子系统中的一系列接口提供一个统一的接口。外观定义了一个更高级别的接口以便子系统更容易使用。原创 2023-01-09 16:16:56 · 74 阅读 · 0 评论 -
设计模式-装饰器模式
附近的山丘上住着一个愤怒的巨魔。通常它是徒手的,但有时它有武器。为了武装巨魔不必创建新的巨魔,而是用合适的武器动态的装饰它。动态的为对象附加额外的职责。装饰器为子类提供了灵活的替代方案,以扩展功能。原创 2023-01-09 09:18:44 · 63 阅读 · 0 评论 -
设计模式-数据总线模式
(实际上,就是 Event-Bus 消息总线模式)允许在一个应用程序的组件之间收发消息/事件,而不需要这些组件相互感知,它们只需要知道所发送/接收的消息/事件的类型即可。原创 2023-01-09 08:56:33 · 576 阅读 · 0 评论 -
Currying(柯里化)
把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。以达成建造者模式效果为例,用2种柯里化方式完成。原创 2023-01-06 16:16:01 · 85 阅读 · 0 评论 -
设计模式-转换器模式
在真实的应用中经常有这种情况,数据库层包含需要被转换成业务逻辑层DTO来使用的实体。对于潜在的大量类进行类似的映射,我们需要一种通用的方法来实现这一点。转换器模式的目的是提供相应类型之间双向转换的通用方法,允许进行干净的实现,而类型之间无需相互了解。原创 2023-01-06 14:09:37 · 546 阅读 · 0 评论 -
设计模式-复合实体模式
对于一个控制台对象,需要管理许多接口功能。通过使用复合实体模式,将消息对象、信号对象等依赖性对象组合在一起,直接使用单个对象对其进行控制。复合实体模式用于对一组相关联的持久化对象进行建模、描述和管理,用于取代对这组对象描述为单独粒度的实体。原创 2023-01-06 10:55:40 · 123 阅读 · 0 评论 -
设计模式-组合模式
每个句子由单词组成,单词又由字符组成。这些对象中的每一个都是可打印的,它们可以在它们之前或之后打印一些内容,例如句子始终以句号结尾,单词始终在其前面有空格。将对象组合成树结构以表示部分整体层次结构。组合可以使客户统一对待单个对象和组合对象。原创 2023-01-05 18:09:28 · 56 阅读 · 0 评论 -
设计模式-命令模式
有一个巫师在地精上施放咒语。咒语在地精上一一执行。第一个咒语使地精缩小,第二个使他不可见。然后巫师将咒语一个个的反转。这里的每一个咒语都是一个可撤销的命令对象。将请求封装为对象,从而使你可以将具有不同请求的客户端参数化,队列或记录请求,并且支持可撤销操作。原创 2023-01-05 11:35:58 · 63 阅读 · 0 评论 -
设计模式-断路器模式
因此,如果其中一个远程服务缓慢或未成功响应,我们的应用程序将尝试使用多个线程/进程从远程服务获取响应,很快它们都会挂起(也称为 [线程饥饿]thread starvationopen in new window)导致我们的整个 Web 应用程序崩溃。我们应该能够检测到这种情况并向用户显示适当的消息,以便他/她可以探索不受远程服务故障影响的应用程序的其他部分。以这样一种方式处理昂贵的远程服务调用,即单个服务/组件的故障不会导致整个应用程序宕机,我们可以尽快重新连接到服务。原创 2023-01-04 18:09:08 · 189 阅读 · 0 评论 -
设计模式-责任链模式
设计模式-责任链模式原创 2023-01-04 11:04:02 · 64 阅读 · 0 评论 -
设计模式-业务委托模式
业务委托模式在表示层和业务层之间添加了一个抽象层。通过使用该模式,我们获得了各层之间的松散耦合,并封装了有关如何定位,连接到组成应用程序的业务对象以及与之交互的逻辑。手机应用程序承诺将现有的任何电影流式传输到您的手机。它捕获用户的搜索字符串,并将其传递给业务委托层。业务委托层选择最合适的视频流服务,然后从那里播放视频。原创 2023-01-03 16:53:17 · 145 阅读 · 0 评论 -
设计模式-建造者模式
想象一个角色扮演游戏的角色生成器。最简单的选择是让计算机为你创建角色。但是如果你想选择一些像专业,性别,发色等角色细节时,这个角色生成就变成了一个渐进的过程。当所有选择完成时,该过程也将完成。:将复杂对象的构造与其表示分开,以便同一构造过程可以创建不同的表示,为伸缩构造器反模式寻找一个解决方案。原创 2023-01-03 14:53:30 · 76 阅读 · 0 评论 -
设计模式-适配器模式
大多数使用第三方类库的应用使用适配器作为一个在应用和第三方类库间的中间层来使应用和类库解耦。如果必须使用另一个库,则只需使用一个新库的适配器而无需改变应用程序的代码。在软件工程中,适配器模式是一种可以让现有类的接口把其作为其他接口来使用的设计模式。你需要使用一些现有的子类,但是子类化他们每一个的子类来进行接口的适配是不现实的。:将一个接口转换成另一个客户所期望的接口。你需要创建一个可重用类,该类与不相关或不可预见的类进行协作,即不一定具有兼容接口的类。想使用一个已有类,但是它的接口不能和你需要的所匹配。原创 2022-12-14 08:33:44 · 205 阅读 · 0 评论 -
设计模式-Acyclic Visitor(非循环访问者模式)
当某些功能在层次结构上运行,但不属于层次结构本身时。:允许将新功能添加到现有的类层次结构中,而不会影响这些层次结构,也不会有四人帮访客模式中那样循环依赖的问题。参考:https://java-design-patterns.com/需要在现有层次结构中添加新功能而无需更改或影响该层次结构时。当重新编译,重新链接,重新测试或重新分发派生元素非常昂贵时。当访问的类层次结构将经常使用元素类的新派生进行扩展时。当您需要根据对象的类型对对象执行非常不同的操作时。原创 2022-12-13 09:05:03 · 545 阅读 · 0 评论 -
设计模式-活动对象模式
活动对象模式有助于解决同步困难,而无需使用“synchronized”方法。活动对象将包含线程安全数据结构(如BlockingQueue),并通过移动方法的逻辑来同步方法调用并将其存储在DSA中。活动对象设计模式使每个驻留在其控制线程中的对象的方法执行与方法调用脱钩。目的是通过使用异步方法调用和用于处理请求的调度程序来引入并发。1.创建活动对象抽象类。原创 2022-12-12 15:53:43 · 196 阅读 · 0 评论 -
设计模式-抽象工厂模式
抽象工厂模式原创 2022-12-12 08:39:57 · 81 阅读 · 0 评论 -
设计模式-抽象文档模式
抽象文档模式原创 2022-12-11 21:18:34 · 201 阅读 · 0 评论