
设计模式与实际应用
文章平均质量分 78
经典设计模式与实际应用 java 版
红衣女妖仙
先知而后行 行必有所为
展开
-
经典设计模式总则
设计模式背景-概念、面向对象六大原则、设计模式分类、二十三中常用设计模式即创建型模式、结构型模式、行为型模式原创 2022-12-22 18:11:20 · 1280 阅读 · 0 评论 -
设计模式之备忘录模式
备忘录模式,又称快照模式,即在不破坏封装的前提下,获取并保存一个对象某一时刻的内部状态,以便以后恢复它。编辑器中的 Ctrl + Z、后退、数据库事务回滚、游戏存档、后悔药等都是备忘录模式的典型应用。备忘录模式的概念、备忘录模式的结构、备忘录模式的优缺点、备忘录模式的使用场景、备忘录模式的实现示例、备忘录模式的源码分析。原创 2022-12-22 18:05:02 · 898 阅读 · 0 评论 -
设计模式之访问者模式
访问者模式,即在不改变聚合对象内元素的前提下,为聚合对象内每个元素提供多种访问方式,即聚合对象内的每个元素都有多个访问者对象。访问者模式主要解决稳定的数据结构和易变元素的操作之间的耦合问题。变量被声明时的类型叫做变量的静态类型,又称为明显类型;而变量所引用的对象的真实类型叫做变量的实际类型。如 Map map = new HashMap(),map 变量的静态类型是 Map,实际类型是 HashMap。根据对象的类型对方法进行选择,就是分派,即 Dispatch,分派又分原创 2022-12-22 12:15:05 · 2418 阅读 · 0 评论 -
设计模式之迭代器模式
java 中集合接口 Collection< E> 的子实现类,Map 接口的子实现类大部分都是用了迭代器模式,被广泛使用。需要注意的是,在 java 中当需要使用迭代器模式时,只需要让我们自定义的聚合类实现 java.util.Iterable 接口,并实现其定义的 iterator() 让其返回一个 java.util.Iterator 接口的子实现类实例即可。迭代器模式的概念、迭代器模式的结构、迭代器模式的优缺点、迭代器模式的使用场景、迭代器模式的实现示例、迭代器模式的源码分析。原创 2022-12-21 22:44:46 · 1051 阅读 · 0 评论 -
设计模式之中介者模式
中介者模式,又称调停模式,即定义一个中介者来封装原有多个对象之间的依赖关系,且可以独立改变它们之间的交互,以降低对象之间的耦合度。其是迪米特法则的典型应用。中介者模式的概念、中介者模式的结构、中介者模式的优缺点、中介者模式的使用场景、中介者模式的实现示例、中介者模式的源码分析。原创 2022-12-21 19:32:33 · 448 阅读 · 0 评论 -
设计模式之观察者模式
观察者模式,又称为发布-订阅模式,即它定义了一种对象间一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化时,会通知所有监听这个主题对象的观察者对象,使它们能够自动更新自己。java.util.Observer 和 java.util.Observable 这两个接口实现了观察者模式,当我们需要使用观察者模式时只需要实现这两个接口即可。观察者模式的概念、观察者模式的结构、观察者模式的优缺点、观察者模式的使用场景、观察者模式的实现示例、观察者模式的源码分析。原创 2022-12-21 17:10:10 · 634 阅读 · 0 评论 -
设计模式之状态模式
状态模式的概念、状态模式的结构、状态模式的优缺点、状态模式的使用场景、状态模式的实现示例、状态模式的源码分析。对有状态的对象,把复杂的判断逻辑提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。原创 2022-12-21 15:05:42 · 528 阅读 · 0 评论 -
设计模式之责任链模式
java web 中的 FilterChain 就是责任链模式的典型应用,spring security 中的 SecurityFilterChain 也是责任链模式的典型应用,其在 FilterOrderRegistration 类中声明了默认内置 filter 的顺序,并在 HttpSecurity 类中声明了内部类 OrderedFilter 来承载 Filter,并对外提供了可以指定顺序的 addFilter 方法,以这些手段来明确 filter 在 filter chain 中的执行顺序。原创 2022-12-20 23:14:36 · 495 阅读 · 0 评论 -
设计模式之命令模式
jdk 中的 Runnable 接口的设计就是一个典型的命令模式。Runnable 接口担当命令角色,Thread 则是调用者,start 方法就是命令执行方法。命令模式,即将请求封装成一个对象,使发出请求的责任和执行请求的责任分离开。这样两者之间通过命令对象进行沟通,方便讲命令对象进行存储、传递、调用和管理。通过源码可以发现,其在发出命令调用时会调用一个本地方法 start0(),开启一个县城。命令模式的概念、命令模式的结构、命令模式的优缺点、命令模式的使用场景、命令模式的实现示例、命令模式的源码分析。原创 2022-12-19 22:52:47 · 647 阅读 · 0 评论 -
设计模式之策略模式
这是典型的策略模式的应用,同样,SessionRegistory 也用到了策略模式。策略模式,即定义一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的用户。策略模式属于对象行为模式,它通过对算法进行封装,使把使用算法的责任和算法的实现分离开来,并委托给不同的对象对这些算法进行管理。策略模式的概念、策略模式的结构、策略模式的优缺点、策略模式的使用场景、策略模式的实现示例、策略模式的源码分析。原创 2022-12-19 19:46:32 · 610 阅读 · 0 评论 -
设计模式之模版方法模式
jdk 中的 InputStream 类的设计就使用了模版方法。而 read(byte b[]) 调用了 read(byte b[], int off, int len) 方法,所以此处 read(byte b[], int off, int len) 方法是模版方法,其定义了算法的步骤,read() 是算法中抽象化的某个步骤,由子类。模版方法模式的概念、模版方法模式的结构、模版方法模式的优缺点、模版方法模式的使用场景、模版方法模式的实现示例、模版方法模式的源码分析。原创 2022-12-19 17:25:34 · 390 阅读 · 0 评论 -
设计模式之组合模式
组合模式的概念、组合模式的结构、组合模式的优缺点、组合模式的使用场景、组合模式的实现示例、组合模式的源码分析。合模式,即部分整体模式,是用于把一组相似的对象当做一个单一个的对象。组合模式依据树形结构来组合对象,用以表示部分以及整体层次。这种类型的设计模式属于结构形模式,它创建了对象组的树形结构。原创 2022-12-18 23:38:14 · 590 阅读 · 0 评论 -
设计模式之享元模式
享元模式,即运用共享技术来有效的支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量,避免大量相似对象的开销,从而提高系统资源的利用率。 享元模式中存在以下两种状态:- 内部状态:即不会随着环境的改变而改变的可共享状态。- 外部状态:即随着环境的改变而改变的不可共享状态。享元模式的实现要领就是区分应用中的这两种状态,并将外部状态外部化。原创 2022-12-18 21:22:01 · 601 阅读 · 0 评论 -
设计模式之外观模式
外观模式,为多个复杂的子系统提供一个统一的接口,使得这些子系统更加容易被访问。在现有的系统中增加一个接口,提供了客户端请求的简化方法和现有系统类方法的委托调用,同时隐藏了系统的复杂性。原创 2022-12-18 17:16:35 · 383 阅读 · 0 评论 -
设计模式之装饰器模式
装饰模式的概念、装饰模式的结构、装饰模式的优缺点、装饰模式的使用场景、装饰模式与代理模式的区别、装饰模式的实现示例、装饰模式的源码分析原创 2022-12-18 14:14:50 · 467 阅读 · 0 评论 -
设计模式之桥接模式
桥接模式,即将抽象和实现分离,使他们可以独立变化。它是用组合关系来代替继承关系实现的,从而降低了抽象和实现这两个可变维度的耦合度。桥接模式基于类的最小设计原则,通过使用封装、聚合、继承等关系让不同的类承担不同的职责。原创 2022-12-17 21:45:16 · 724 阅读 · 0 评论 -
设计模式之适配器模式
适配器模式,即将一个类的某个接口转换成用户希望的另一个接口,使得原本由于接口不兼容而不能在一起工作的类可以在一起工作。适配器模式分为类适配器模式和对象适配器模式,类适配器模式依赖继承关系实现,故比依赖组合或聚合关系实现的对象适配器模式耦合度高。jdk 中的 Reader(字符流)、InputStream(字节流)的适配使用的是 InputStreamReader。适配模式的概念、适配模式的结构、适配模式的优缺点、适配模式的使用场景、适配模式的实现示例(类适配模式和对象适配模式)、适配模式的源码分析。原创 2022-12-17 18:03:11 · 655 阅读 · 0 评论 -
设计模式之代理模式
代理模式的概念、代理模式的结构、代理模式的优缺点、代理模式的使用场景、代理模式的实现示例(静态代理、jdk 动态代理、cglib 动态代理)、代理模式的源码分析原创 2022-12-16 22:40:11 · 1514 阅读 · 0 评论 -
设计模式之建造者模式
建造者模式出上述用途外,其在在 jdk、spring 等源码中以及日常开发中最常用的另外一种方式则是:当一个构造器需要传入很多参数时,其代码可读性会较差,且很容易引入错误,此时就可以利用建造者模式。将一个复杂对象的构建和表示分离,使得同样的创建过程可以得到不同的表示。其主要特点是将产品本身和产品创建过程解耦,且分解产品创建过程,使创建过程更加清晰,同时也方便控制产品的创建过程步骤。建造者模式的概念、建造者模式的结构、建造者模式的优缺点、建造者模式的使用场景、建造者模式的实现示例、建造者模式的源码分析。原创 2022-12-15 12:32:54 · 417 阅读 · 0 评论 -
设计模式之抽象工厂模式
抽象工厂模式的概念、抽象工厂的结构、抽象工厂的优缺点、抽象工厂的使用场景、抽象工厂的实现示例、抽象工厂的源码分析。原创 2022-12-08 19:46:35 · 1362 阅读 · 0 评论 -
设计模式之工厂方法模式
工厂方法模式的概念、工厂方法模式的结构、工厂方法模式的优缺点、工厂方法模式的使用场景、工厂方法模式的实现示例、工厂方法模式的源码分析。工厂方法模式,及简单工厂模式的升级版,其抽象了对象的创建,将对象的具体创建延迟到了其子类中。这样,当有新产品加入时,不用再修改已有的工厂类,只需要增加新产品的实现和新产品对应工厂的实现即刻。原创 2022-12-08 17:55:01 · 593 阅读 · 0 评论 -
设计模式之简单工厂模式
简单工厂模式,与其说是设计模式,不如称它为编程习惯。简单工厂只提供了简单的对象生产能力,且违反了软件设计原则的 开闭原则。其没有被收录在 GoF 的二十三种设计模式中。简单工厂模式的概念、简单工厂模式的结构、简单工厂模式优缺点、简单工厂模式的使用场景、简单工厂模式的实现示例。注:简单工厂模式没有被收录在 GoF 的二十三种设计模式中。原创 2022-12-08 17:49:15 · 428 阅读 · 0 评论 -
设计模式之原型模式
原型模式的概念、原型模式的结构、原型模式的优缺点、原型模式的使用场景、浅拷贝与深拷贝、原型模式的实现示例、原型模式的源码分析 原型模式,即将一个对象作为原型对象,通过对其克隆而复制出多个与原型对象类似的新实例。 使用原型模式创建对象要比使用 new 等关键字创建对象性能好的多,因为原型模式的本质是使用 Object 的 clone() 方法克隆对象,而这个方法是本地方法,它直接操作内存中的二进制流,特别是大对象时,性能差异特别明显。使用原型模式就好比复制粘贴,而不是亲手码。需要注意的是,使用原型模式时需原创 2022-12-07 12:01:22 · 431 阅读 · 0 评论 -
设计模式之单例模式
单例模式的概念、单例模式的结构、单例模式的优缺点、单例模式的使用场景、单例模式的实现示例、序列化和反射与单例模式、单例模式源码分析 单例模式,即只能生成一个实例的模式叫做单例模式。单例模式是只有一个简单的类,没有复杂的调用和接口的设计,只要求这个类无论什么时候只能生成一个实例即可。 如日志应用、应用配置读取、通信、线程池、windows 的任务管理器、垃圾回收站等。 单例模式一般有七种实现方式,即懒汉-线程不安全、懒汉-线程安全、饿汉、饿汉-变种、静态内部类、枚举、双重校验锁。懒汉-线程不安全懒原创 2022-12-06 18:30:09 · 727 阅读 · 1 评论 -
设计模式之代理模式
代理模式定义: 调用者使用代理类来调用目的接口的对象使用场景: 当调用者不想直接调用目的接口对象或者调用者调用目的接口对象存在困难时实现一(静态代理):创建代理类来实现优点: 任何实现目的接口的对象都可以通过代理类来访问,增加了代码的通用性缺点: 当目的接口发生更改时,代理类 也得随之改变;当代理对象非常多时就会显得代理对象特别臃肿目的接口:public interface Subject { void visit();}目的接口实现类(代理对象):public clas原创 2020-08-20 17:20:00 · 128 阅读 · 0 评论 -
设计模式之单例模式
单例模式定义: 确保应用中应用单例模式的类只能有一个实例实现:构造方法私有化,使其不能在外部通过使用 new 关键字来实例化对象在类产生唯一一个 private static 的实例化对象定义一个静态方法返回该对象具体实现一: 饿汉模式(线程安全) 在类加载时就创建对象优点: 实现简单,线程安全缺点: 在类加载时就实例化了对象,使此对象一直存在,当类被卸载时才会释放内存,故在一定情况下消耗内存public class TestOne {原创 2020-08-20 17:18:28 · 150 阅读 · 0 评论