设计模式
文章平均质量分 89
一条粉肠与蛋散
我写的代码,像诗一样优雅
展开
-
设计模式-模板方法模式 Template Method
在 Java AbstractList 类中,addAll() 函数可以看作模板方法,add() 是子类需要重写的方法,尽管没有声明为 abstract 的,但函数实现直接抛出了 UnsupportedOperationException 异常。前提是,如果子类不重写是不能使用的。原创 2024-02-13 16:44:12 · 1230 阅读 · 0 评论 -
设计模式-策略模式 Strategy
策略类的定义比较简单,包含一个策略接口和一组实现这个接口的策略类。因为所有的策略类都实现相同的接口,所以,客户端代码基于接口而非实现编程,可以灵活地替换不同的策略。@Override//具体的算法...@Override//具体的算法...原创 2024-02-12 17:13:35 · 1787 阅读 · 0 评论 -
设计模式-状态模式 State
状态模式并不是很常用,但是在能够用到的场景里,它可以发挥很大的作用。状态设计模式是一种行为型设计模式,它允许对象在其内部状态发生变化时改变其行为。这种模式可以消除大量的条件语句,并将每个状态的行为封装到单独的类中。上下文(Context):上下文通常包含一个具体状态的引用,用于维护当前状态。上下文委托给当前状态对象处理状态相关行为。抽象状态(State):定义一个接口,用于封装与上下文的特定状态相关的行为。具体状态(Concrete State):实现抽象状态接口,为具体状态定义行为。原创 2024-02-12 17:12:02 · 1683 阅读 · 0 评论 -
设计模式-观察者模式 Observer
观察者模式是一种行为设计模式,允许对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都会得到通知并自动更新。在这种模式中,发生状态改变的对象被称为“主题”(Subject),依赖它的对象被称为“观察者”(Observer)。观察者模式(Observer Design Pattern)也被称为发布订阅模式在 GoF 的《设计模式》一书中,它的定义是这样的:翻译成中文就是:在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,所有依赖的对象都会自动收到通知。原创 2024-02-11 17:02:28 · 1769 阅读 · 0 评论 -
设计模式-职责链模式Chain of Responsibility
在实际的项目开发中比较常用。在框架开发中,我们也可以利用它们来提供框架的扩展点,能够让框架的使用者在不修改框架源码的情况下,基于扩展点定制化框架的功能。原创 2024-02-11 16:59:31 · 1703 阅读 · 0 评论 -
设计模式-装饰模式 Decorator
这还只是附加了两个增强功能,如果我们需要附加更多的增强功能,那就会导致组合爆炸,类继承结构变得无比复杂,代码既不好扩展,也不好维护。如果 InputStream 只有一个子类 FileInputStream 的话,那我们在 FileInputStream 基础之上,再设计一个孙子类 BufferedFileInputStream,也算是可以接受的,毕竟继承结构还算简单。**第二个比较特殊的地方是:装饰器类是对功能的增强,这也是装饰器模式应用场景的一个重要特点。的抽象方法,用于定义被装饰对象的基本行为。原创 2024-02-10 18:13:47 · 1697 阅读 · 0 评论 -
设计模式-适配器模式 Adapter
适配器模式的主要目的是在不修改现有代码的情况下,使不兼容的接口能够协同工作。通过引入适配器角色,客户端可以使用目标接口与需要适配的类进行通信,从而实现解耦和扩展性。适配器设计模式(Adapter Design Pattern)是一种结构型设计模式,用于。,使得它们可以协同工作。在实际开发中,应根据具体需求选择使用类适配器还是对象适配器。适配器模式有两种实现方式:类适配器和对象适配器。原创 2024-02-10 18:11:45 · 1206 阅读 · 0 评论 -
设计模式-建造者模式Builder
我们考虑一个文档编辑器的例子。假设我们需要创建一个复杂的HTML文档,它包含了标题、段落和图像等元素。我们可以使用创建者设计模式来构建HTML文档。2.实现不可变对象。即一旦创建完成,对象的状态就不能改变。这有助于保证对象的线程安全和数据完整性。2.在ssm源码中很多类都使用创建者设计模式,如Spring中的。1.根据复杂的配置项进行定制化构建。类,mybatis中的。原创 2024-02-09 16:46:48 · 1406 阅读 · 0 评论 -
设计模式-代理模式Proxy
1.创建一个接口,定义 代理类和被代理类实现共同的接口2.创建被代理类,实现这个接口,并且在其中定义实现方法3.创建代理类,也要实现这个接口,同时在其中定义一个被代理类的对象作为成员变量4.在代理类中实现接口中的方法,方法中调用 被代理类 中的对应方法5.通过创建代理对象,并调用其方法,方法增强这样,被代理类的方法就会被代理类所覆盖,实现了对被代理类的增强或修改。原创 2023-09-03 13:02:35 · 918 阅读 · 0 评论 -
设计模式-工厂模式Factory
重要性比不上简单工厂和工厂方法抽象工厂模式是工厂方法模式的升级版本,在有多个业务品种、业务分类时,通过抽象工厂模式生产需要的对象是一种不错的解决方案。多种类型的产品,即增加产品族。如:抽象多种产品类型// 抽象文本类型// 略....// 抽象图片类型// 略....// 抽象视频资源// 略....每一个工厂实例都可以生产一个产品族/*** IResourceFactory,每一个工厂实例都可以生产一个产品族/*** 加载图片资源的工厂方法* @param url 资源路径。原创 2023-09-02 10:42:18 · 670 阅读 · 0 评论 -
设计模式-单例模式Singleton
直接导致的结果就是,他无法成为其他类的父类,这就相当于直接放弃了继承和多态的特性,也就相当于损失了可以应对未来需求变化的扩展性,以后一旦有扩展需求,比如写一个类似的具有绝大部分相同功能的单例,我们不得不新建一个十分【雷同】的单例。在进行反序列化时,会尝试执行readResolve方法,并将返回值作为反序列化的结果,而不会克隆一个新的实例,保证jvm中仅仅有一个实例存在。在类加载的时候,instance 静态实例就已经创建并初始化好了,所以,instance 实例的创建过程是线程安全的。原创 2023-09-01 16:25:10 · 820 阅读 · 0 评论