
设计模式
文章平均质量分 81
设计模式相关的内容
radient-lsr
这个作者很懒,什么都没留下…
展开
-
享元设计模式
对象池、连接池(比如数据库连接池)、线程池等也是为了复用,那它们跟享元模式有什么区别呢?虽然对象池、连接池、线程池、享元模式都是为了复用,但是,如果我们再细致地抠一抠“复用”这个字眼的话,对象池、连接池、线程池等池化技术中的“复用”和享元模式中的“复用”实际上是不同的概念。池化技术中的“复用”可以理解为“重复使用”,主要目的是节省时间(比如从数据库池中取一个连接,不需要重新创建)。原创 2023-08-14 19:33:14 · 55 阅读 · 0 评论 -
构建者设计模式
中文翻译为或者,也有人叫它。原创 2023-08-13 22:55:34 · 45 阅读 · 0 评论 -
观察者设计模式
不过,在实际的项目开发中,这两种对象的称呼是比较灵活的,有各种不同的叫法,比如:Subject-Observer、Publisher-Subscriber、Producer-Consumer等等。不同的应用场景和需求下,这个模式也有截然不同的实现方式,之前我们所列举的所有的例子都是同步阻塞的实现方式,当然我们的观察者设计模式也有异步非阻塞的实现方式;的线程池来实现异步非阻塞的通知。观察者模式的应用场景非常广泛,小到代码层面的解耦,大到架构层面的系统解耦,再或者一些产品的设计思路,都有这种模式的影子。原创 2023-08-13 22:57:59 · 55 阅读 · 0 评论 -
单例设计模式
尽管单例是一个很经典的设计模式,但在实际的开发中,我们也很少按照严格的定义去使用它,以上的知识大多是为了理解和面试而使用和学习,有些人甚至认为单例是一种反模式(anti-pattern),压根就不推荐使用。 大部分情况下,我们在项目中使用单例,都是用它来表示一些全局唯一类,比如配置信息类、连接池类、ID 生成器类。单例模式书写简洁、使用方便,在代码中,我们不需要创建对象。但是,这种使用方法有点类似硬编码(hard code),会带来诸多问题,所以我们一般会使用spring的单例容器作为替代方案。原创 2023-08-13 22:53:06 · 48 阅读 · 0 评论 -
装饰器设计模式
它维护一个指向抽象构建对象的引用,通过该引用可以调用装饰之前构建对象的方法,并通过其子类扩展该方法,已达到装饰的目的。ConcreteDecorator(具体装饰类):它是抽象装饰类的子类,实现抽象装饰类的相关方法,负责给具体构件类添加新的功能。两者都是对类的方法进行增强,但装饰器模式强调的是增强自身,在被装饰之后你能够够在被增强的类上使用增强后的方法。ConcreteComponent(具体构件类):它是抽象构建类的子类,实现了抽象构建类业务方法,具体装饰类会给它增加额外的功能。原创 2023-08-14 19:34:32 · 44 阅读 · 0 评论 -
策略设计模式
在实际开发中,我们可以参考这些例子,根据业务需求和系统架构灵活地运用策略模式。相反,如果策略类是有状态的,根据业务场景的需要,我们希望每次从工厂方法中,获得的都是新创建的策略对象,而不是缓存好可共享的策略对象,那我们就需要按照如下方式来实现策略工厂类。不过,它的作用还不止如此。它也可以像模板模式那样,提供框架的扩展点等等。,这样的策略对象是可以被共享使用的,不需要在每次调用 getStrategy() 的时候,都创建一个新的策略对象。,事先创建好每个策略对象,缓存到工厂类中,用的时候直接返回。原创 2023-08-13 22:56:53 · 46 阅读 · 0 评论 -
适配器设计模式
适配器设计模式(Adapter Design Pattern)是一种结构型设计模式,用于。,使得它们可以协同工作。在实际开发中,应根据具体需求选择使用类适配器还是对象适配器。原创 2023-08-14 19:32:35 · 41 阅读 · 0 评论 -
代理设计模式
使用继承来实现代理的好处是简单易懂,不需要创建接口,同时继承可以继承被代理类的属性和方法,可以更方便地访问被代理类中的成员。综上所述,JDK动态代理适用于那些已经实现了接口的类,而CGLIB动态代理适用于那些没有实现接口的类。如果需要代理的类已经实现了接口,推荐使用JDK动态代理,如果需要代理的类没有实现接口,可以考虑使用CGLIB动态代理。注解标注,实现了重试的逻辑。总的来说,Spring AOP 是一种非常方便的 AOP 实现方式,可以大大简化程序中的横切关注点处理,提高代码的可重用性和可维护性。原创 2023-08-13 22:54:33 · 45 阅读 · 0 评论 -
原型模式 --- 深拷贝&浅拷贝
**不复制引用类型指向的对象本身。**浅拷贝可以用于一些简单的场景,例如对象的基本属性不包含其他对象的引用类型,或者不需要修改对象引用类型所指向的对象。注意跟下面的set()做好区分,因为涉及到扩容,所以原型模式是用不了的,在set()方法里面是用的原型设计模式。然而,在需要快速创建具有相似属性的新对象时,原型设计模式提供。深拷贝的实现,通常有两个思路,一个是递归克隆,一个是使用序列化的手段,我们分别对以下两种方式进行讲解。在Java编程中,浅拷贝是指在复制对象时,原创 2023-08-13 22:56:22 · 119 阅读 · 0 评论 -
责任链设计模式及过滤器
比如说这个相同的 url 路径,那到底谁先谁后呢?通过控制 order属性 控制执行顺序,order数字越小优先级越高,所以 Filter1 会优先于 Filter2......原创 2023-08-14 19:33:52 · 168 阅读 · 0 评论 -
模版方法设计模式
这里的“算法”,我们可以理解为广义上的“业务逻辑”,并不特指数据结构和算法中的“算法”。这里的算法骨架就是“模板”,包含算法骨架的方法就是“模板方法”,这也是模板方法模式名字的由来。原理很简单,代码实现就更加简单,我写了一个示例代码,如下所示。templateMethod() 函数定义为 final,是为了避免子类重写它。method1() 和 method2() 定义为 abstract,是为了强迫子类去实现。原创 2023-08-13 22:58:30 · 52 阅读 · 0 评论 -
组合设计模式
再比如说 ,一个大公司 ,下面有很多小的部门 ,每一个部门下面又有很多个部门。组合模式(Composite Pattern)也称为整体部分(Part-Whole)模式 ,它的宗旨是通过将单个对象(叶子节点)和组合对象(树枝节点)用相同的接口进行表示 ,使得客户对单个对象和组合对象的使用具有一致性 ,属千结构型模式。组合模式一般用来描述整体与部分的关系 ,它将对象组织到树形结构中 ,最顶层的节点称为根节点 ,根节点下面可以包含树枝节点和叶子节点 ,树枝节点下面又可以包含树枝节点和叶子节点。原创 2023-08-14 19:35:04 · 51 阅读 · 0 评论 -
工厂设计模式
在简单工厂和工厂方法中,往往只需要创建一种类型的产品,但是如果需求改变,需要增加多种类型的产品,即增加产品族,我们上边的需求是创建各种类型的资源,本小节我们再增加一个维度,如图片资源、视频资源、文本资源等。原创 2023-08-13 22:53:41 · 39 阅读 · 0 评论