自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 JAVA设计模式-观察者模式-以消息订阅为例

观察者模式定义:定义对象之间的一对多依赖,让多个观察者对象同时监听某一主题对象,当主题对象发生变化时,它的所有依赖着都会受到通知并更新。观察者模式属于行为型模式。其实很好理解,就是类似我们平常微博,B站的关注一样,当被关注者发送新动态时,所有的关注该用户的人都会收到通知。

2023-08-24 09:49:07 139

原创 JAVA设计模式-中介者模式-以传话为例

中介者模式中,中介维护所有的类对象,每个类对象需要维护一个中介,然后彼此通过各自的中介来进行交互。这里举的例子非常的简单,在实际中这两个类可能是完全不同的类,也可能会有更多种类的类参与中介者模式。不过大体的交互思路是类似的,只是中介者会变得更加复杂,且中介者类与类间交互的方法也会更加复杂。

2023-08-24 09:48:59 52

原创 JAVA设计模式-备忘录模式-以游戏存档为例

备忘录模式的定义备忘录模式(Memento Pattern)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。这个模式的定义很好理解。其实就是备份数据,方便后续恢复,这里我们直接看案例。

2023-08-24 09:48:42 180 1

原创 JAVA设计模式-解释器模式

解释器模式可以将一个语言的句子抽象成语法树的形式,通过递归的方式来解析语法,适合一些复杂问题,可扩展性良好。我这里的语法设计的并不好,后续在实际开发中如果需要使用解释器模式需要对语法树进行设计。

2023-08-24 09:48:32 49 1

原创 设计模式-状态模式-以NPC好感度为例

可以看到,当一个对象的行为取决于它的状态并且状态会在程序运行中改变时适合用状态模式,其实每个状态具有的方法不一定一样,虽然本文案例是基本一样,但是其实每个状态具有的方法可以完全不一样,当然,这样就需要在状态转变时需要更加注意相应方法的调用设计。需要注意的是,状态模式的结构本身并不简单,使用时需要注意状态模式的设计。

2023-08-24 09:48:19 54 1

原创 设计模式-责任链模式-以权限管理为例

其实责任链分为两种,分别为纯的责任链和不纯的责任链。纯的责任链要求一个节点只有两种选择,承担责任或者传递责任,不允许承担一部分责任。不纯的责任链则是一个节点可以承担一部分的责任并将另一部分继续传递。本文的例子是一个不纯的责任链。通过本文的例子可以看出来,责任链模式实现了将请求的发送者和请求的处理者解耦,同时每个责任链节点之间的处理也可以相对隔离,每个节点只需要承担自己需要承担的责任,而不用考虑其他责任。

2023-08-24 09:48:07 47 1

原创 设计模式-访问者模式-以走亲戚为例

从上述例子可以看到,访问者模式在动态添加算法方面很灵活,不需要改动任何对象内部,只需要新增一个visitor类即可,提搞了代码的可维护性,可扩展性,同时符合单一职责原则,被访问者的相关行为被封装在一个访问者中,每个访问者的功能单一但是缺点也是很明显的,当我们需要增加一个新的被访问者时,我们将不得不修改许多类的内部结构,所以访问者模式不适用于元素变化频繁的情况。并且破坏了封装性,所有的访问者都可以了解到被访者的所有细节。

2023-08-24 09:47:53 27 1

原创 设计模式-模板方法模式-以做包子为例

模板模式适用于一部分业务过程有着相同或者相近的执行逻辑步骤时进行处理,其统一了业务的算法结构的同时也给算法执行本身提供了较强的灵活性。缺点是每一个相近的业务都需要实现一个自己的子类,容易导致类数量过多。

2023-08-24 09:47:32 42 1

原创 JAVA设计模式-迭代器模式-以个人信息为例

从这个案例可以看出迭代器模式的大致构成,但是会发现好像实现的就是在List上面套了层壳,这里是我偷懒了,其实对于较为简单的遍历完全没有必要使用迭代器模式,迭代器模式更多的还是用在复杂结构遍历或者自己实现一些新容器的时候。结合迭代器的优点来介绍一下一些迭代器我自己理解的实现思路与适合场景简化客户端代码:遍历逻辑封装在迭代器中,客户端不需要知道具体实现。例如当遍历对象内部有嵌套的多个类时,客户端如果想要遍历所有对象就会显得异常麻烦统一遍历接口。

2023-08-24 09:47:11 30 1

原创 JAVA设计模式-命令模式-以MMORPG为例

从案例回过去看定义可以发现,命令模式将具体实现对象的一些行为统一封装成命令通过请求者供客户端调用,对客户端屏蔽了其具体实现,实现了客户端和接收者的解耦,并且具有良好的扩展性,添加新的命令操作非常简便。

2023-08-24 09:46:50 31 1

原创 设计模式-代理模式-以权限控制为例

代理模式的应用在实际中非常多,这里无法全部一一介绍,每个代理模式应用的具体实现也可能会有较大的区别,不过通过案例也可以了解到,代理模式本身相当于在客户端与目标对象直接额外增加一层关口,可以起到管控的作用也可以起到扩展的作用。

2023-08-07 09:58:09 111

原创 设计模式-享元模式-以维修工具为例

享元模式通过划分内部状态和外部状态的方式提取一组对象的共同特点,运用共享技术来避免大量对象创建而导致的内存和系统性能问题。但是享元问题的直接使用具有线程安全问题,如果不加以任何的线程保护,在高并发情况下很有可能会出现对象的外部状态同时被多个线程改变而导致数据不一致问题,不建议在高并发环境下使用该模式。

2023-08-07 09:57:49 21

原创 设计模式-外观模式-以看电影为例

这个模式很好理解,实际中可能也经常无意识的用到了,将复杂操作封装成简易接口供客户端调用,从而降低客户端的操作难度以及与客户端解耦合。

2023-08-07 09:57:23 26

原创 设计模式-组合模式-以大学结构为例

由上面案例可以看出,组合模式可以简化客户端操作,客户端只需要调用相同的接口就可以操作不同的对象,并且当新增加对象是客户端不需要修改代码。同时可以看出在需要表示一个对象整体与部分的层次结构的场合或者遍历组织架构,或者处理的对象具有树形结构时非常适合组合模式。

2023-08-07 09:57:04 21

原创 设计模式-装饰者模式-以奶茶为例

通过上面例子可以看出,装饰者模式具有以下一些特点可以动态的增加被装饰者的装饰品,具有良好的灵活性及可扩展性,可以增加装饰品种类也可以增加被装饰者种类。符合开闭原则,允许行为可以被扩展,而不需修改现有的代码。一般情况下,装饰者本身可以对用户透明,用户不必知道装饰者的具体实现,只需要知道其接口。

2023-08-07 09:56:09 91

原创 设计模式-桥接模式-以奶茶为例

由上面例子可以看出来,桥接模式更加适合一种物品有多维度属性,通过桥接模式将多维度属性通过组合的方式添加,避免类数量爆炸的问题,同时也实现了抽象与实现的分离。但是这种方法的缺点也是很明显的,随着类的数量增多,关系会相对继承显得更加错综复杂。

2023-08-07 09:54:25 36

原创 设计模式-适配器模式-以手机耳机转换口为例

适配器模式的定义非常的简单,其主要指现在具有两个类,分别为A类和B类,B类需要调用A类接口来获取一些数据,但是A类的接口提供的返回类型为C,B类需要的返回类型为D。为了在不改变两个类接口的情况下使两者兼容,我们就需要开发一个新的接口,用来将C转化为D,使得B类可以使用A类的接口。这就是适配器模式的主要作用。

2023-08-07 09:53:57 36

原创 设计模式-原型模式-以模板为例

原型模式的优点在于其可以快速的创建大量相同或相似的复杂对象,提高开发速度的同时优化系统性能原型模式的缺点在于需要一开始规划好原型类的设计,原型类的后期改动会异常麻烦原型模式的适用场景多体现在需要频繁的应用一个相同或相似状态的对象或者对象本身的创建成本过于大。一个对象本身的状态在软件中越固定,越适合原型模式。

2023-08-07 09:40:26 23

原创 设计模式-建造者模式-以KFC为例

通过上述例子可以看出建造者模式主要适合以下的一些应用场景生成的对象具有复杂的内部结构,存在多个对象具有相似的细节需要创建的对象有着复杂且固定的创建流程隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品。

2023-08-07 09:31:17 89

原创 设计模式-单例模式-以公司公章为例

单例模式的主要思想是如果一个程序中有一个对象只需要唯一的一个,同时该对象可以被程序所共享,则可以使用单例模式来维护该对象。因此单例模式类需要满足以下特点。这里以企业公章为背景,企业的公章经常需要被使用,但是实际上企业的公章一般情况下是唯一的。

2023-08-07 09:30:10 18

原创 设计模式-策略模式-以游戏BOSS设计为例

可以看出,策略模式的优势就在于将算法族和应用者隔离开,应用者可以很方便的切换算法。但是缺点也很明显,就是会导致类数量的爆炸,尤其是程序复杂时。像我这个简单的例子都已经有10多个类了。而且对应用者要求高,应用者必须要知道每个算法,不符合迪米特原则。

2023-08-04 14:11:43 129 1

原创 设计模式-工厂模式-以餐饮为例

简单工厂模式,指将一些对象的创建从由使用者进行创建,改为由一个工厂类来统一创建对象,使用者只需要传入对应的参数告知工厂类需要哪一种对象即可。这里以餐厅为例,餐厅后厨负责做菜,服务员充当工厂角色,用来传递顾客的点餐给后厨,后厨做完之后由服务员传递首先需要定义一个后厨接口,用于服务员(工厂)创建餐品(对象)然后定义三种菜品类继承后厨接口最后定义一个服务员类(工厂类),用于点餐测试用户点餐点餐结果一份酸菜鱼。

2023-08-04 09:02:55 125 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除