自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 设计模式学习笔记(二十三)观察者模式

1、降低了对象之间的耦合度。观察者和观察目标之间是松散耦合的,当观察目标发生变化时,不需要知道具体有哪些观察者对它感兴趣,也不需要知道观察者的具体实现,从而使得代码更加清晰并易于维护。2、支持广播通信。一个观察目标可以同时通知多个观察者,实现一对多的通知机制。这样做的好处是观察目标只需要知道观察者列表即可,无需知道具体的观察者实现,从而简化了设计和实现。3、支持动态添加和删除观察者。在运行时可以动态地向观察目标注册或删除观察者,增加了系统的灵活性。

2023-10-22 22:50:08 85

原创 设计模式学习笔记(二十二)访问者模式

1、增加新的操作:通过引入访问者模式,可以在不修改已有元素类的情况下,定义新的操作。这样可以增加系统的灵活性和可扩展性。2、分离数据结构和操作:访问者模式将数据结构和对数据的操作分离开来,使得操作可以独立于数据结构进行变化。3、符合开闭原则:当需要新增一种操作时,只需增加一个新的具体访问者类,而无需修改已有元素类和其他访问者类。1、增加新的元素类困难:在访问者模式中,每增加一个新的元素类,都需要在访问者接口和所有的具体访问者类中增加相应的访问方法,这可能导致类的层次结构变得复杂。

2023-10-21 22:30:17 126

原创 设计模式学习笔记(二十一)模板方法模式

1、提高代码复用性:将共同的代码抽取到模板方法中,不同的实现可以在具体子类中重写相关方法,从而避免了重复编写相同的代码。2、提供了灵活性:模板方法定义了算法的骨架,但允许具体子类根据需要进行自定义实现,使得整个算法可以适应不同的变化。3、便于扩展:通过添加新的具体子类来扩展功能或修改算法的某些部分,而无需更改模板方法本身。1、增加了类的数量:使用模板方法模式需要定义抽象类和具体子类,可能会增加类的数量,使得代码结构变得复杂。

2023-10-16 23:12:07 87

原创 设计模式学习笔记(二十)备忘录模式

原发器类(Originator)1、原发器类是需要保存状态并支持状态恢复的对象。2、原发器类具有访问和修改内部状态的方法,并能够创建备忘录对象来保存当前状态或从备忘录对象中恢复之前的状态。当原发器需要保存状态时,它会创建一个备忘录对象,并将自己的状态传递给备忘录对象,使其保存。当需要恢复到之前的某个状态时,原发器可以从备忘录对象中获取相应的状态值,并将其设置为当前状态。备忘录类(Memento)1、备忘录类是用于存储原发器对象的内部状态。

2023-09-10 18:05:46 218

原创 设计模式学习笔记(十九)中介者模式

1、解耦:中介者模式将对象之间的通信行为集中在一个中介者对象中,使得各个对象之间不直接相互引用,从而降低了它们之间的耦合度。2、简化对象间交互:中介者模式通过将复杂的交互逻辑封装在中介者对象中,简化了对象之间的交互过程,使其更加直观和易于理解。重用性:中介者模式将对象间的通信行为集中在一个中介者对象中,可以使得该中介者对象在不同的场景下被重用,减少了重复的代码编写。3、扩展性:通过增加新的中介者对象或者修改现有中介者对象,可以比较灵活地改变对象间的交互方式。

2023-09-09 21:59:59 198 1

原创 设计模式学习笔记(十八)迭代器模式

1、简化了聚合对象的接口:迭代器模式将遍历元素的责任封装在迭代器中,聚合对象只需要提供一个迭代器对象即可,简化了聚合对象的接口。2、支持多种遍历方式:迭代器模式可以根据需求实现不同的迭代方式,例如顺序遍历、逆序遍历等,而不需要修改聚合对象的代码。3、封装了遍历算法:迭代器模式将遍历算法封装在迭代器中,客户端无需关心具体的遍历实现细节,方便了代码的重用和维护。4、增强了代码的灵活性和可扩展性:由于聚合对象与迭代器之间解耦,可以方便地替换或新增新的迭代器,而无需修改聚合对象的代码。

2023-09-03 22:15:16 165

原创 设计模式学习笔记(十七)命令模式

1、解耦调用者和接收者:命令模式将请求发送者与接收者解耦,使得调用者不需要知道接收者的任何细节,只需通过命令进行请求。2、容易扩展新的命令:因为命令模式将命令封装成独立的对象,所以很容易添加新的命令类,无需修改现有的代码。3、支持撤销和重做:命令模式可以记录操作历史,从而支持撤销和重做功能。4、支持事务操作:可以使用命令模式来实现事务操作,将一组相关的命令封装在一个命令对象中,确保它们能够一起执行或撤销。例如日志调用、宏命令等。

2023-09-03 13:41:00 472

原创 设计模式学习笔记(十六)职责链模式

1、降低耦合度:将请求发送者和接收者解耦,每个对象只需关注特定的请求类型,对于其他请求可以无视。2、灵活性和扩展性:可以根据需求动态添加或修改请求处理器,使得系统更具灵活性和可扩展性。3、可维护性:职责链模式使得系统中的每个处理器只关注自己的业务逻辑,代码更加清晰、简洁,易于维护。1、性能问题:由于请求可能被多个处理者处理,因此有可能会导致性能问题。当处理者的数量过多时,可能会影响请求的处理效率。

2023-08-31 21:53:03 135 1

原创 设计模式学习笔记(十五)代理模式

1、降低耦合度:代理模式将客户端与真实对象解耦,客户端只需与代理进行交互,无需直接与真实对象交互,减少了彼此之间的依赖关系。2、增强安全性:代理可以在访问真实对象之前进行权限验证和安全检查,确保只有合法的请求才能访问真实对象。3、延迟加载:代理模式可以实现延迟加载,即在需要时才创建和初始化真实对象,从而提高了系统的启动性能。4、附加功能:代理对象可以在调用真实对象的方法前后附加额外的逻辑和功能,例如日志记录、缓存、性能监测等。

2023-08-28 21:54:47 210 1

原创 设计模式学习笔记(十四)享元模式

1、减少内存占用:享元模式通过共享相似对象的内部状态来减少系统中的内存占用。相同的内部状态可以被多个对象共享,避免了每个对象都保存一份相同的数据。2、提高性能:由于共享对象的复用,减少了对象的创建和销毁次数,从而提高了系统的性能。3、简化对象结构:享元模式将对象分为内部状态和外部状态,内部状态可以共享,外部状态可以在运行时传入。这样简化了对象的结构,使得系统更加灵活、可扩展和易于维护。

2023-08-27 22:33:55 253

原创 设计模式学习笔记(十三)外观模式

1、简化接口:外观模式通过封装复杂子系统,提供了一个简化的接口给客户端,隐藏了子系统的复杂性,使得使用更加方便和易于理解。2、解耦和重用:外观模式将客户端与子系统之间的耦合度降低,客户端只需与外观类进行交互,而不需要直接与子系统进行交互。这种解耦使得子系统的修改不会影响到客户端代码,并且可以提高代码的重用性。3、提供了整体功能:外观模式充当一个整体功能的门面,使得客户端可以更加专注于业务逻辑,而无需关心底层的复杂实现细节。

2023-08-27 18:00:54 98

原创 设计模式学习笔记(十二)装饰模式

1、动态地扩展对象的功能:可以在不修改原始对象的情况下,动态地给对象添加新的行为和功能。2、遵循开闭原则:通过对原始对象进行包装,实现了对扩展开放、对修改关闭的原则。可以轻松地新增装饰器类,而不需要修改已有的代码,提高了代码的可维护性和可扩展性。3、符合单一职责原则:装饰模式将功能划分到不同的装饰器类中,每个装饰器类只关注自己的特定功能,使得类的设计更加清晰,提高了代码的可读性和可理解性。4、避免使用子类的过多继承:通过组合多个装饰器对象来扩展功能,避免了使用过多的子类继承。

2023-08-27 16:25:27 127

原创 设计模式学习笔记(十一)组合模式

1、简化客户端代码:使用组合模式,客户端可以以统一的方式处理单个对象和组合对象,无需区分它们的差异,从而简化了客户端的代码。2、增强扩展性:组合模式使得在对象树中添加新对象变得简单,可以通过继承组合模式的抽象类来实现。这样可以方便地扩展对象的层次结构,而无需修改现有代码。3、统一操作:组合模式使得可以对组合对象和叶子对象执行相同的操作,从而统一了操作接口。客户端无需关心是对单个对象还是组合对象进行操作,简化了代码的逻辑。

2023-08-27 00:17:38 310

原创 设计模式学习笔记(十)桥接模式

1、分离接口和实现,使得两者可以独立变化,从而提高了系统的灵活性和可维护性。2、桥接模式可以在不破坏原有系统结构的情况下增加新的抽象层次和实现层次,提高系统的可扩展性。3、可以减少系统中类的个数,简化系统设计和编码。1、增加了系统的复杂性。2、对于简单的系统,桥接模式可能会带来过度设计的问题。1、当需要避免或减少抽象和实现之间的紧密耦合时,可以使用桥接模式。2、当需要扩展抽象和实现之间的继承关系时,可以使用桥接模式。3、当需要在抽象和实现之间添加新的功能时,可以使用桥接模式。

2023-08-26 17:47:49 61

原创 设计模式学习笔记(九)适配器模式

1、适配器模式可以让已有的类与其他类协同工作,无需修改原有代码,提高代码的可重用性。2、可以封装复杂的转换过程,对客户端隐藏具体的实现细节。3、可以通过引入适配器,实现类与接口之间的解耦,提高系统的扩展性和灵活性。1、增加了额外的代码量,引入了适配器对象的间接性,增加了代码的复杂性。2、在适配器转换过程中,可能会导致性能损失。3、如果需要适配的接口发生变化,适配器本身也需要进行相应的修改。1、当需要使用一个已经存在的类,但其接口不符合需求时,可以使用适配器模式。

2023-08-24 21:35:53 247 1

原创 设计模式学习笔记(八)建造者模式

我们可以通过建造者模式,通过指挥者来创建复杂的对象,并且在构建过程中一步一步来构建此对象,此外我们引入了钩子函数,利用此函数,可以更加精细化构建过程。优点:1、封装性好:通过使用建造者模式,客户端代码只需关注指定需要的产品类型和建造步骤,而不必知道具体的建造细节。2、可扩展性强:可以增加新的建造者类,扩展产品的种类,且原有的代码无需修改。容易控制产品的构造过程:由于建造者负责对象构建的每一步骤,因此可以对构建过程逐步细化,并且更容易控制。3、遵循单一职责原则。

2023-08-23 20:58:41 226

原创 设计模式学习笔记(七)原型模式

1、减少了对象的创建成本:原型模式通过克隆现有的对象来创建新的对象,避免了重复的初始化过程,提高了创建对象的效率。2、提高了对象的复用性:通过原型模式可以方便地复制已有对象的状态,从而创建新的对象。这样可以避免创建大量相似对象的开销。3、隐藏了对象创建的细节:客户端只需通过克隆方法即可获取新的对象,无需关心对象的具体实现和创建细节。1、深度克隆可能较为复杂:如果原型对象中包含引用类型的属性,并且需要进行深度克隆,那么克隆过程可能比较复杂。需要注意在克隆过程中处理好关联对象的克隆。

2023-08-18 21:01:18 250 1

原创 设计模式学习笔记(六)单例模式

1、确保只有一个实例:单例模式确保一个类只有一个实例对象存在,可以避免多次实例化相同对象,节省系统资源。2、全局访问点:单例对象通常被设计为全局访问点,可以在程序的任何地方访问该实例,方便进行统一的管理和调用。3、节省资源:由于单例模式只创建一个实例,可以减少内存占用和对象创建销毁的开销。4、实现线程安全:通过适当的实现方式,单例模式可以保证在多线程环境下的线程安全性。1、不透明性:单例模式隐藏了类的实例化细节,使代码的可读性变差,使用不当可能导致代码难以理解和维护。

2023-08-15 21:45:20 229 1

原创 设计模式学习笔记(五)抽象工厂模式

由于上一章的工厂方法模式中,每一个产品类都需要对应一个工厂类,因此会产生大量的工厂类,基于这个情况,我们可以考虑。

2023-08-13 21:42:52 118 1

原创 学习笔记番外篇之注解与反射

初始化即调用 < cinit >()V 方法,虚拟机会保证这个类的 【构造方法】的线程安全发生的时机。作为方法区这个类的各种数据的访问入口。的方法,以后访问这个类时,不论是创建还是获取都是通过此class实例(类模板)来获取。3、解析:堆中的字符串常量池中的符号引用替换为直接引用(运行时常量池,在。2、解析类的二进制数据流为方法区内的数据结构(Java 类模型)如果发现类的父类没有初始化,则先触发其父类的初始化。子类访问父类的静态变量,只会触发父类的初始化。1、通过类的全名,获取类的二进制数据流。

2023-08-13 18:26:08 115 1

原创 设计模式学习笔记(四)工厂方法模式

1、主要优点(1) 在工厂方法模式中,工厂方法用来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类将被实例化这一细节,用户只需要关心所需产品对应的工厂,无须关心创建细节,甚至无须知道具体产品类的类名。(2) 基于工厂角色和产品角色的多态性设计是工厂方法模式的关键。它能够让工厂可以自主确定创建何种产品对象,而如何创建这个对象的细节则完全封装在具体工厂内部。工厂方法模式之所以又被称为多态工厂模式,就正是因为所有的具体工厂类都具有同一抽象父类。

2023-08-03 22:20:36 49

原创 设计模式学习笔记(三)简单工厂模式

简单工厂模式提供了专门的工厂类用于创建对象,将对象的创建和对象的使用分离开,它作为一种最简单的工厂模式在软件开发中得到了较为广泛的应用。1、主要优点简单工厂模式的主要优点如下:(1) 工厂类包含必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的职责,而仅仅“消费”产品,简单工厂模式实现了对象创建和使用的分离。

2023-07-31 23:23:50 336 1

原创 设计模式学习笔记(二)面向对象原则

在面向对象编程语言中,实现一个接口就需要实现该接口中定义的所有方法,因此大的总接口使用起来不一定很方便,为了使接口的职责单一,需要将大接口中的方法根据其职责不同分别放在不同的小接口中,以确保每个接口使用起来都较为方便,并都承担某一单一角色。(2) 我们在运用里氏代换原则时,尽量把父类设计为抽象类或者接口,让子类继承父类或实现父接口,并实现在父类中声明的方法,运行时,子类实例替换父类实例,我们可以很方便地扩展系统的功能,同时无须修改原有子类的代码,增加新的功能可以通过增加一个新的子类来实现。

2023-07-31 22:01:50 149 1

原创 设计模式学习笔记(一)导论

本文章供个人学习笔记,如有侵权,请告知删除

2023-07-24 17:36:53 72

空空如也

空空如也

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

TA关注的人

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