设计模式
文章平均质量分 73
柒间
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
代理模式(Proxy Pattern)
■ 代理主题(Proxy Subject)角色:也叫做委托类、代理类,该角色负责控制对真实主题的引用,负责在需要的时候创建或删除真实主题对象,并且在真实主题角色处理完毕前后做预处理和善后处理工作。■ 抽象主题(Subject)角色:该角色是真实主题和代理主题的共同接口,以便在任何可以使用真实主题的地方都可以使用代理主题。代理模式是一项基本的设计技巧,许多其他的模式,如状态模式、策略模式、访问者模式本质上也采用了代理模式。⽬标对象的代理,负责控制和管理⽬标对象,并间接地传递外部对⽬标对象的访问。原创 2024-10-27 21:34:03 · 678 阅读 · 1 评论 -
抽象工厂模式
抽象工厂模式是一个简单的模式,使用的场景非常多,例如,应用需要涉及不同操作系统的时候,可以考虑使用抽象工厂模式,如果需要在三个不同的平台(Windows、Linux、Android)上运行,则可以通过抽象工厂模式屏蔽掉操作系统对应用的影响。■ 产品族内的约束为非公开状态,在不同的工厂中,各种产品可能具有不同的相互依赖关系,这些依赖关系由工厂封装在其内部,对于工厂的使用者是不可见的。抽象工厂模式的使用场景是:当一个对象族(或是一组没有任何关系的对象)都有相同的约束,则可以使用抽象工厂模式。原创 2024-10-25 01:49:05 · 711 阅读 · 0 评论 -
原型模式(Prototype Pattern)
注意 Java中Object提供的clone()方法采用的是“浅”克隆,即只复制关联对象的引用,而不复制关联对象的数据。■ 性能优良:原型模式是在内存二进制流的复制,要比直接new一个对象性能好,特别是在一个循环体内产生大量的对象时,原型模式可以更好地体现其优点。■ 一个对象多个修改者的场景,一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时,可以考虑使用原型模式复制多个对象供调用者使用。■ 性能和安全要求的场景,通过new产生一个对象需要非常烦琐的数据准备或访问权限,可以使用原型模式。原创 2024-10-24 00:54:22 · 762 阅读 · 0 评论 -
工厂方法模式
此种进一步抽象化的结果,使这种工厂方法模式可以用来允许系统在不修改具体工厂角色的情况下引进新的产品,这一特点使得工厂模式具有超过简单工厂的优越性。■ 具体产品(Concrete Product)角色:该角色实现抽象产品角色所声明的接口,工厂方法模式所创建的每一个对象都是某个具体产品角色的实例。工厂方法模式是简单工厂模式的进一步抽象和推广。首先,在工厂方法模式中,■ 具体工厂(Concrete Creator)角色:该角色实现了抽象工厂接口,含有与应用密切相关的逻辑,并且受到应用程序的调用以创建产品对象。原创 2024-10-24 00:00:01 · 390 阅读 · 0 评论 -
简单工厂(Simple Factory)
简单工厂模式中,一个工厂类处于对产品类实例化的中心位置上,它知道每一个产品,它决定哪一个产品类应当被实例化。这个模式的优点是允许客户端相对独立于产品创建的过程,并且在系统引入新产品的时候无须修改客户端,即在某种程度上支持“开-闭”原则。这个模式的缺点是对“开-闭”原则的支持不够,因为如果有新的产品加入到系统中,则需要修改工厂类,将必要的逻辑加入到工厂类中。简单工厂把实例化的操作单独放到一个类中,这个类就成为简单工厂类,让简单工厂类来决定应该用哪个具体子类来实例化。原创 2024-10-23 23:57:12 · 399 阅读 · 0 评论 -
单例模式(Singleton)
双重检验锁模式(double checked locking pattern),是一种使用同步块加锁的方法,称为双重检查锁,因为会有两次检查 instance == null,一次是在同步块外,一次是在同步块内。在枚举被加载时,所有的枚举常量会被实例化,而每个枚举常量都是 final 和 static 的,因此只会被实例化一次。从案例1,可以发现创建对象都是通过共有的一个方法获取对象的。的规则,且仅在需要时才加载。这与外部类的加载是相互独立的,外部类的实例化、方法调用等操作不会触发静态内部类的加载。原创 2024-10-23 23:56:14 · 1168 阅读 · 0 评论 -
CGLib代理
CGLib代理代理为控制要访问的目标对象提供了一种途径。当访问对象时,它引入了一个间接的层。JDK自从1.3版本开始,就引入了动态代理,并且经常被用来动态地创建代理。JDK的动态代理用起来非常简单,当它有一个限制,就是使用动态代理的对象必须实现一个或多个接口。如果想代理没有实现接口的继承的类,我们可以使用CGLib动态代理。动态代理的选用:目标对象要求实现接口,使用jdk动态代理。目标对象不需要实现接口,用CGLib代理。CGLlb整体架构图我们发现,cglib在字节码层面的操作技术主原创 2021-08-21 23:56:40 · 299 阅读 · 0 评论 -
如何正确地写出单例模式
单例模式算是设计模式中最容易理解,也是最容易手写代码的模式了吧。但是其中的坑却不少,所以也常作为面试题来考。本文主要对几种单例写法的整理,并分析其优缺点。很多都是一些老生常谈的问题,但如果你不知道如何创建一个线程安全的单例,不知道什么是双检锁,那这篇文章可能会帮助到你。懒汉式,线程不安全当被问到要实现一个单例模式时,很多人的第一反应是写出如下的代码,包括教科书上也是这样教我们的。public class Singleton { private static Singleton instance转载 2021-08-05 19:01:51 · 314 阅读 · 0 评论
分享