设计模式
文章平均质量分 86
学习设计模式
程序员小牧之
汲取,分享与成长,我们唯一能做的就是坚持。
展开
-
23.共享模式
亨元模式是一种结构型设计模式,它丢弃了在每个对象中保存所有数据的方式,通过共享多个对象所共有的相同状态,让我们能在有限的内存容量中载入更多的对象。原创 2022-08-21 10:51:54 · 1506 阅读 · 1 评论 -
22.原型模式
直接复制还有另外一个问题,那就是我们必须知道对象所属的类才能创建复制对象,所以代码必须依赖该类。即使我们可以接收额外的依赖性,那还有一个问题:原创 2022-08-13 08:59:41 · 152 阅读 · 0 评论 -
21.建造者模式
建造者模式是一种创建型设计模式,它能让我们将创建一个复杂对象的步骤分开,一步一步的建造好我们要创建的对象架子,在最后使用时生成实例对象。该模式允许我们使用相同的创建代码生成不同类型的对象。...原创 2022-08-11 08:39:57 · 178 阅读 · 0 评论 -
20.单例模式进阶
比如,在一个系统中,总有一些东西是全局共享且很少改变的。比如数据库的url , password, username配置信息。我们可以把它放在一个单例类中,然后系统中所有的地方需要用到这些配置的时候,就可以直接通过全局访问点获得此单例类的实例,然后通过调用相关的方法获取相关的配置。...原创 2022-08-07 13:21:32 · 115 阅读 · 0 评论 -
19.工厂模式能解决啥问题
我们考虑这个问题的时候就说明我们其实已经了解了工厂模式,我们想要知道工厂模式的具体应用场景,并灵活的在工作中使用它来提供工作效率。原创 2022-07-19 21:19:30 · 1213 阅读 · 1 评论 -
18.装饰者模式能解决什么问题?
在讨论这个问题之前,我们先来复习下装饰者模式的定义:装饰者模式动态的将责任附加到对象上。 如果要扩展功能,装饰者提供了比继承更有弹性的替代方案。上面的定义中的关键是: 动态的将责任附加到对象上。 我们该如何理解这句话?我们可以这样理解:有一个对象A,它有一个方法sayHello,这个方法已经实现用英文打印 hello。下面需求来了,客户让你在不改变源代码的情况下让这个sayHello方法还要能打印中文 你好。在我们没有接触装饰者模式情况下,我们可能想到新增一个类继承这个对象A,然后重写sayHello原创 2022-07-10 17:17:32 · 379 阅读 · 0 评论 -
17.观察者模式能解决什么问题
在考虑这个问题之前,我们先来复习一下观察者模式定义:观察者模式定义了对象之间的一对多依赖,当一个对象改变状态时,它的所有依赖都会收到通知并自动更新。看到这句话,我们要考虑一个问题:对象之间的依赖,谁依赖谁,怎么判断哪个是依赖者,哪个是被依赖者?那个是一,那个是多,如何依赖的?弄清楚了这个问题,就好理解了。带着上面的问题,我们来复习一下观察者模式的UML图(看不懂的请移步:观察者模式笔记)从上面的例子我们可以看到,有观察者Observer,被观察者(也叫主题)Subject,其中使用的过程中他们是相互组原创 2022-07-06 20:33:39 · 817 阅读 · 0 评论 -
16.策略模式能解决什么问题?
前面学习了很多种设计模式,通过实际的例子来进行学习,好像确实在那个例子里解决了问题,但是我们现实中的需求和例子中的往往不一样,那么我们该如何判断现实项目中策略模式能解决什么问题呢?这一节就策略模式的实用性迁移展开了一些讨论,纯属个人见解,仅供参考!策略模式定义了算法族,将具体的算法各自封装起来,让他们之间可以相互替换,并让算法的变化独立于使用算法的客户。首先,我们结合下面的UML图来解析一下:在上面的设计中,MallardDuck和RedheadDuck是客户,而FlyBehavior是一个飞行行为算法族原创 2022-07-01 17:49:43 · 722 阅读 · 0 评论 -
15.代理模式
代理模式为另一个对象提供提供一个替身或占位符(代理对象)以控制对这个对象的访问。简单来说,现在比如有一个对象A, 有一个对象B, 本来是对象B直接可以调用对象A实现某种功能的,但是由于特殊的原因对象B无法直接调用对象A来完成功能,而是通过对象C将对象A的调用封装后暴露接口给对象B调用才能完成我们想要的功能,这时我们就可以说对象C是对象A的代理对象。静态代理在编码时期将代理类写死的方式供其他对象使用。例如如下设计:Person接口ChinesePerson类现在我们想通过调用ChinesePerso原创 2022-06-26 14:59:45 · 235 阅读 · 0 评论 -
14.Java RMI学习以及制作远程服务
我们需要了解如何利用RMI进行远程方法调用。首先,RMI提供了客户辅助对象和服务辅助对象,为客户辅助对象创建和服务对象相同的方法。RMI的好处在于,我们不必自己写任何网络或I/O的代码。客户程序调用远程方法就和运行在客户自己的本地JVM上对对象进行正常方法调用一样。RMI提供了所有运行时的基础设施,好让这一切正常工作,包括查找服务(lookup service),这个服务用来寻找和访问远程对象。关于RMI调用和本地的方法调用,有一个不同点,虽然调用远程方法就如同调用本地方法一样,但是客户辅助对象会通过原创 2022-06-26 14:58:03 · 525 阅读 · 0 评论 -
13.状态模式
状态模式允许对象在内部改变时改变它的行为,对象看起来好像修改了它的类。原创 2022-06-24 10:08:55 · 156 阅读 · 0 评论 -
12.组合模式
组合模式允许我们将对象组合成树形结构来表现 "整体/部分" 层次结构。 组合能让客户以一致的方式处理个别对象以及对象组合。原创 2022-06-22 21:16:23 · 103 阅读 · 0 评论 -
11.迭代器模式
迭代器模式提供一个方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的实现。原创 2022-06-20 21:00:25 · 166 阅读 · 0 评论 -
10.模板方法模式
在方法中定义一个算法的骨架,将一些步骤的具体实现延迟到子类中。 模板方法模式使得子类可以在不改变算法结构的情况下重新定义算法的某些步骤。原创 2022-06-18 09:04:45 · 295 阅读 · 0 评论 -
9.外观模式
外观模式提供一个统一的接口,用来访问子系统中的一群接口。原创 2022-06-17 09:45:30 · 97 阅读 · 0 评论 -
8.适配器模式
适配器模式学习(内附UML图和gitee代码地址)原创 2022-06-14 21:20:08 · 159 阅读 · 1 评论 -
7.命令模式
以head first书籍为蓝本,从简单的实现到使用命令模式自己实现里面的需求,达到真正理解命令模式的效果。原创 2022-06-09 22:15:00 · 184 阅读 · 3 评论 -
6.单例模式
从简单的单例模式到安全的单例模式学习原创 2022-06-03 20:52:56 · 97 阅读 · 0 评论 -
5.抽象工厂模式
对接上一节工厂模式最后提出的依赖问题的解决方案:抽象工厂模式,并使用具体的实施方案来理解此模式。原创 2022-06-02 08:41:32 · 361 阅读 · 3 评论 -
4.工厂模式
1.什么是工厂模式?工厂模式分为三种:简单工厂: 将创建一类对象的细节封装在一个对象中,外界只需要通过这个对象(工厂对象)根据特定的参数直接获取想要的对象即可。工厂方法模式:定义一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。2.通过具体的需求实例来理解2.1 员工A的困惑在自己学习到一个原则后:要针对抽象编程,而不是针对具体实现编程。 员工A有啦自己的困惑,为啥我们知道这个原则,但是还是逃不掉new,要知道我们在代码里写出new A()的时候就原创 2022-05-30 21:35:43 · 330 阅读 · 0 评论 -
3.装饰者模式
以实例的形式来学习装饰者模式,学习和动手相结合。原创 2022-05-25 22:14:58 · 133 阅读 · 0 评论 -
2.观察者模式
以具体的需求出发,通俗易懂,循序渐进的学习观察者模式原创 2022-05-22 11:10:17 · 518 阅读 · 0 评论 -
1.策略模式
1.什么是策略模式?策略模式定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。2.结合案例理解此模式借用设计模式head first书本中的例子,我们根据一次简单的项目设计来体现策略模式的优势。2.1 首次需求2.1.1需求描述我们需要做一款模拟鸭子的游戏,游戏中会出现各种鸭子,一边游泳戏水,一般呱呱叫。请提供此游戏的后端支持,提供各种的鸭子api2.1.2 程序设计从满足需求的方向上去设计,我们可以得到如下设计:设计一个鸭子抽象类,用来定义所有鸭原创 2022-05-08 16:36:40 · 881 阅读 · 0 评论