![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 62
Coding Machine
加油
展开
-
责任链模式
责任链模式 避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。值得注意的是:责任链可能是一条直线、一个环链或者一个树结构的一部分。 职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递。从而避免请求发送者与接收者的耦合。 角色 抽象处理者角色:定义出一个处理请求的接口或抽象类。如果有需要,接口可以定义出一个方法以设定和返回对下家的引用 具体处理者角色: 具体处理者接到请求后,可原创 2021-12-07 20:04:24 · 360 阅读 · 0 评论 -
观察者模式
观察者模式 定义: 多个对象间存在一对多关系,当一个对象发生改变时,把这种改变通知给其他多个对象, 从而影响其他对象的行为 优点: 观察者和被观察者是抽象耦合的 设置了一套触发机制 缺点: 如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知是比较耗时的 观察者和被观察者如果存在循环依赖,会触发它们之间进行循环调用,可能导致系统崩溃 无法知道目标是如何发生变化的,仅仅只能了解到其发生了变化 使用场景: 一个对象的改变将导致其他一个或多个对象也发生改变,而不知道具体有多少对象将发原创 2021-12-07 20:02:40 · 332 阅读 · 0 评论 -
观察者模式
监听器 定义: 多个对象间存在一对多关系,当一个对象发生改变时,把这种改变通知给其他多个对象, 从而影响其他对象的行为 优点: 观察者和被观察者是抽象耦合的 设置了一套触发机制 缺点: 如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知是比较耗时的 观察者和被观察者如果存在循环依赖,会触发它们之间进行循环调用,可能导致系统崩溃 无法知道目标是如何发生变化的,仅仅只能了解到其发生了变化 使用场景: 一个对象的改变将导致其他一个或多个对象也发生改变,而不知道具体有多少对象将发生改原创 2021-11-23 22:53:28 · 320 阅读 · 0 评论 -
装饰者模式详解
装饰者模式 动态的给对象增加一些职责,即增加其额外的功能。就功能而言更加灵活,可以作为继承的替代。 优点: 装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能 缺点: 多层装饰比较复杂 使用场景: 扩展一个类的功能 动态增加功能,动态撤销 使用实例: Java I/O Streams 、 实现 现在有一幢大房子,只是毛坯房,开始给他进行装修 被装饰者 public interface House { /** * 装修墙原创 2021-11-18 22:29:03 · 375 阅读 · 0 评论 -
适配器模式详解
适配器模式 将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作 分类: 类适配器、对象适配器 优点: 可以让任何两个没有关联的类一起运行 提高了类的复用 增加了类的透明度 灵活性好 缺点: 过多地使用适配器,会让系统非常零乱,不易整体进行把握。(例如我调用的命名是A接口,其内部却被适配成了B接口的实现) 使用场景: 系统需要使用现有的类,而此类的接口不符合系统的需要 通过接口转换,将一个类插入另一个类系中 有动机地修改一个正常运行的系统的接口 使用第原创 2021-11-18 22:27:38 · 369 阅读 · 0 评论 -
代理模式详解
代理模式 为某个对象提供一个代理,从而控制这个代理的访问。代理类和委托类具有共同的父类或父接口。在任何使用委托类对象的地方都可以使用代理类对象替代。代理类负责请求的预处理、过滤等,将请求分配给委托类处理、以及委托类处理完请求的后续处理。 代理模式角色: Subject 抽象主题角色 抽象主题类可以是抽象类也可以是接口,是一个最普通的业务类型定义,无特殊要求。 RealSubject 具体主题角色 也叫做被委托角色、被代理角色。它才是冤大头,是业务逻辑的具体执行者。 Proxy 代理主题角色 也叫原创 2021-11-18 22:25:13 · 572 阅读 · 0 评论 -
原型模式详解
原型模式 定义: 用于创建重复的对象,同时又能保证性能。用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。 使用场景: 资源优化 性能和安全要求的场景 通过 new 产生一个对象需要非常繁琐的数据准备或访问权限,则可以使用原型模式 一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时,可以考虑使用原型模式拷贝多个对象供调用者使用 原型模式很少单独出现,一般和工厂方法模式配合使用,原型模式 clone 对象,工厂方法提供调用 使用条件: 必须实现 Cloneable 接口。在原创 2021-11-06 16:57:03 · 199 阅读 · 0 评论 -
建造者模式
建造者模式 定义: 将一个复杂对象分解成多个相对简单的部分,然后根据不同需要分别创建它们,最后构建成不同复杂对象 优点: 建造者独立,易扩展。 便于控制细节风险。 缺点: 产品必须有共同点,范围有限制 内部变化复杂,就会有很多的建造类 使用场景: 对象具有复杂的内部结构 对象内部属性本身相互依赖 角色 Builder:为创建一个产品对象的各个部件指定抽象接口 ConcreteBuilder:实现了 Builder 接口,实现各个部件的具体构造和装配方法,定义并明确它所创建的原创 2021-11-06 16:54:05 · 166 阅读 · 0 评论 -
抽象工厂模式
定义: 围绕一个超级工厂创建其他工厂。该超级工厂能创建其他工厂。接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。 优点: 当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。 抽象工厂提供了一个接口,用于从产品系列的每个类创建对象。只要你的代码通过此接口创建对象,你就不必担心创建与你的应用程序已创建的产品不匹配的错误产品变体。 缺点: 产品族扩展非常困难,要添加某一产品族的产品时,需要修改和添加的地方较多。 使用场景:原创 2021-09-25 20:20:46 · 109 阅读 · 0 评论 -
简单(静态)工厂模式
定义: 定义了一个创建对象的类,由这个类来封装实例化对象的行为。 优点: ①产品的创建交给了工厂类,客户端无需自己创建产品,只需要提供对应的参数。工厂和产品的职责区分明确。 ②客户端无需知道所创建具体产品的类名,只需知道参数即可。 ③也可以引入配置文件(比如解析XML等),在不修改客户端代码的情况下更换和添加新的具体产品类。 缺点: ①工厂类单一,负责所有产品的创建,职责过重,一旦异常,整个系统将受影响。且工厂类代码会非常臃肿,违背高内聚责任分配原则。 ②使用简单工厂模式会增加系统中类的个数(引入新原创 2021-09-12 16:51:37 · 301 阅读 · 0 评论 -
Java经典排序方法图解及代码实现
常见的排序算法有:冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序等。 冒泡排序 O(n2 ) 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成 排序过程 比较相邻的元素。如果第一个比第二个大,就交换它们两个 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在 最后的元素应该会是最大的数 针对所有的元素重复以上的步骤,除了最后一个 重复步骤1~3,直到排序完成原创 2021-09-11 17:19:18 · 166 阅读 · 0 评论 -
单例模式详解
单例模式详解 定义: 一个类最多只有一个实例,并提供一个全局访问点。就好像我们的Windows 系统的任务管理器,你只能开一个,不能开多个。 单例模式的种类: 懒汉式 和 饿汉式 实现的必要条件: 私有化构造、静态全局访问 暴力破解: 反射 1.饿汉式单例 public class SingletonHungry { private SingletonHungry(){}; private static final SingletonHungry INSTANCE = new Singlet原创 2021-09-11 00:55:04 · 313 阅读 · 0 评论 -
23 种设计模式-持续更新中
总原则-开闭原则 对扩展开放,对修改封闭。在程序需要进行拓展的时候,不能去修改原有的代码,而是要扩展原有代码,实现一个热插拔的效果。想要达到这样的效果,接口,抽象类等都是必不可少的。 1、单一职责原则 每个类应该实现单一的职责,不要存在多于一个导致类变更的原因,否则就应该把类拆分。 2、里氏替换原则(Liskov Substitution Principle) 任何基类可以出现的地方,子类一定可以出现。里氏替换原则是继承复用的基石,只有当衍生类可以替换基类,软件单位的功能不受到影响时,基类才能真正被复用原创 2021-09-09 23:15:58 · 165 阅读 · 0 评论