![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java设计模式
文章平均质量分 69
你佳哥
勿于浮沙筑高台
展开
-
实战java设计模式(二十四)职责链模式
目录1 介绍2 例子2.1 站台父类2.2 站台实现类2.3 主测试类3 总结3.1 核心结构3.2 核心代码结构 1 介绍 职责链模式也叫责任链模式,理解它可以用数据结构链表去理解。 2 例子 去火车站找人,假设家人不幸丢失,去一个陌生的地方找人,人生地不熟,先随便去个火车站或者汽车站找,如果没有找到警察叔叔就会说要不去飞机场试试看看,就这样一个个的找。 2.1 站台父类 abstract class Station{ //属性 public List<String> name原创 2020-11-14 16:24:19 · 101 阅读 · 0 评论 -
实战java设计模式(二十三)策略模式
目录1 介绍2 例子2.1 策略父类(老师的问题)2.2 不同的策略2.3 策略拥有者2.4 测试主类3 总结3.1 核心角色3.2 核心代码结构 1 介绍 策略模式适用于一个问题有多种解决方案的情况。 2 例子 假如在一个幼儿园大班,老师问怎么才能通过数学计算得到6这个数字,每个小朋友的方案都不一样,使用策略模式就非常方便了。 2.1 策略父类(老师的问题) interface Strategy{ void get6(); } 2.2 不同的策略 //加法策略 class Add impleme原创 2020-11-14 15:30:50 · 82 阅读 · 0 评论 -
实战java设计模式(二十二)状态模式
目录1 介绍2 例子2.1 水接口2.2 水的三种状态的实现2.3 一杯具体的水(果汁)2.4 测试主类3 总结3.1 核心角色3.2 核心代码结构 1 介绍 类的行为是基于它的状态改变的。 2 例子 该项设计模式适用于那种类的功能方法随着类的状态改变该改变的场景。比如水的三种状态是随着温度的变换而变化的。 2.1 水接口 interface Water { void drink();//被喝 void chew();//被咀嚼 void steam();//用来蒸 } 2.2 水原创 2020-11-14 15:05:59 · 229 阅读 · 0 评论 -
实战java设计模式(二十一)解释器模式
目录1 介绍二级目录三级目录 1 介绍 待深挖 二级目录 三级目录原创 2020-11-14 20:12:55 · 145 阅读 · 0 评论 -
实战java设计模式(二十)备忘录模式
目录1 介绍2 例子2.1 需要存档的状态类2.2 游戏角色类2.3 存档类2.4 测试主类3 总结 1 介绍 保存一个对象的某个状态,以便在适当的时候恢复对象。常用是例子就是游戏存档。 2 例子 游戏中一个角色要打boss,可能失败可能成功,需要把打boss前的自己状态进行存档。 2.1 需要存档的状态类 class State { public int blood; public int energy; } 2.2 游戏角色类 class Hero { private int原创 2020-11-14 11:17:11 · 155 阅读 · 0 评论 -
实战java设计模式(十九)中介者模式
目录1 介绍2 例子2.1 中介者2.2 住户抽象2.3 住户实体2.4 测试主类3 总结 1 介绍 中介者模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。 2 例子 小区居民针对物业费情况要做一个讨论,每个居民都是依赖关系,要获取对方的信息,为了减少这种耦合,可以采用中介在中间传话的方式。 2.1 中介者 //中介者 class Mediator{ //维护一个信息表 private String nowInfor=""; //获取 pub原创 2020-11-14 10:39:28 · 163 阅读 · 0 评论 -
实战java设计模式(十八)观察者模式
目录1 介绍2 例子2.1 观察者接口2.2 观察者实体2.3 被观察者2.4 测试主类3 总结3.1 核心角色3.2 核心代码结构 1 介绍 当对象间存在一对多关系时,则使用观察者模式。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。 2 例子 假设有一个自然灾害观测站,当发生灾害的时候要通知到每一个在这里注册登记过的电视台,并且要第一时间播报给观众。 2.1 观察者接口 abstract class Observer { //向本台观众发送灾难预警 publ原创 2020-11-14 10:16:27 · 241 阅读 · 0 评论 -
实战java设计模式(十七)迭代器模式
目录1 介绍2 例子2.1 迭代器接口2.2 容器接口2.3 实现一个字符串容器2.4 测试主类3 例子升华4 总结4.1 核心角色4.2 核心代码结构 1 介绍 用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。 2 例子 设计字符串容器类,并且用迭代器去访问元素。 2.1 迭代器接口 //迭代器接口 interface Iterator { //有没有下一个对象 boolean hasNext(); //返回一个对象 Object next(); } 2.2 容原创 2020-11-14 09:26:10 · 83 阅读 · 0 评论 -
实战java设计模式(十六)访问者模式
目录1 介绍2 例子2.1 可访问接口2.2 员工抽象类2.3 员工实现类2.4 访问者接口2.5 访问者实体2.6 测试主类3 例子升华4 总结4.1 核心角色4.2 核心代码结构 例子来源:访问者模式一篇就够了,非常不错。 1 介绍 访问者模式实现对象数据和数据操作的解耦。 2 例子 一个公司有程序员和产品经理,年末了,需要做考核,CEO和CTO关注员工的考核指标不一样,CEO关心KPI,CTO关心产品数和代码行数,如果把CEO考核和CTO考核方式都写在员工类里面,这样耦合就大了,于是访问者模式就横空出原创 2020-11-13 17:28:29 · 119 阅读 · 0 评论 -
实战java设计模式(十五)命令模式
目录1 介绍2 例子2.1 电灯实体类2.2 命令接口2.3 实现命令2.4 测试主类3 例子升华4 总结4.1 核心角色4.2 关键代码结构 1 介绍 命令模式实现了指挥者和执行者之间的解耦。可以很好的实现指挥者对执行者的控制。 2 例子 以打开关闭电灯为例子,如果不采用命令模式,直接客户端调用电灯,耦合较大,针对较为复杂的情况如果需要撤销,较为麻烦。在二者之间加一个命令作为桥梁,可以很好的实现解耦,让命令对象去执行执行者的方法。 2.1 电灯实体类 //电灯接收者 class Light{ //原创 2020-11-13 17:00:12 · 132 阅读 · 0 评论 -
实战java设计模式(十四)模版模式
目录1 介绍2 例子2.1 手机接口(模板)2.2 具体手机实现2.3 测试主类3 总结 1 介绍 一个抽象类公开定义了执行它的方法的方式/模板。和外观模式一样,非常简单,就是一个典型的依赖倒转的面向接口编程的设计模式。 2 例子 2.1 手机接口(模板) interface Phone{ //打电话 void call(); //发短信 void sendMessage(); //拍照 void photograph(); } 2.2 具体手机实现 //小原创 2020-11-13 16:18:28 · 122 阅读 · 0 评论 -
实战java设计模式(十三)代理模式
目录1 介绍2 静态代理模式2.1 例子2.1.1 授课接口2.1.2 老师类2.1.3 代理老师(核心)2.1.4 测试主类2.2 总结3 动态代理3.1 例子3.2 总结4 Cglib代理 1 介绍 一个类代表另一个类的功能。 2 静态代理模式 2.1 例子 2.1.1 授课接口 //授课 interface InterFaceTeach{ void teach(); } 2.1.2 老师类 //老师类 class Teacher implements InterFaceTeach{原创 2020-11-13 15:46:59 · 95 阅读 · 0 评论 -
实战java设计模式(十二)享元模式
目录1 介绍2 例子2.1 果汁接口2.2 水果实体(实现果汁接口)2.3 榨汁机工厂(核心)2.4 测试主类3 总结 1 介绍 享元,享元,共享元素,主要用于减少创建对象的数量,以减少内存占用和提高性能。说白了就是如果要创建同样的对象(只读不写),可以使用这种设计模式节省空间。 2 例子 用一个榨汁机的例子来描述,可能抽象的有些不对,但是核心内容应该是可以体会到。 2.1 果汁接口 //果汁接口 interface Juice{ //榨出果汁 void juicer(); //获得原创 2020-11-13 15:27:01 · 153 阅读 · 0 评论 -
实战java设计模式(十一)外观模式
目录1 介绍2 例子2.1 每个步骤各自的类2.2 整合到一起2.3 测试主类3 总结 1 介绍 这是最简单的设计模式。一看就懂。适用于那种把多个办事流程封装到一起的情况。 2 例子 最好的例子就是把大象装进冰箱。 2.1 每个步骤各自的类 //第一步 class First{ public void firstStep(){ System.out.println("打开冰箱门"); } } //第二步 class Second{ public void secon原创 2020-11-13 11:43:39 · 60 阅读 · 0 评论 -
实战java设计模式(十)组合模式
目录1 介绍2 例子2.1 文件夹(文件)抽象父类2.2 添加一个接口适配器(可选)2.3 叶子节点的实现2.4 非叶子节点2.5 测试主类3 例子升华4 总结4.1 核心角色4.2 核心代码结构 1 介绍 部分整体模式,是用于把一组相似的对象当作一个单一的对象。 2 例子 这样的情况非常使用于文件夹存放文件的情况,文件夹可以多级,如果为每级文件夹都定义一个类的话成本是非常高的。 2.1 文件夹(文件)抽象父类 //抽象父类 abstract class FileFolder { //展示一下这个文原创 2020-11-13 11:27:13 · 178 阅读 · 0 评论 -
实战java设计模式(九)装饰器模式
装饰器模式是我本人觉得非常巧妙的一种设计模式,值得细细品味。 目录1 介绍2 例子2.1 饮料抽象类2.2 咖啡实体2.3 加佐料的饮料抽象类(核心)2.4 实现加佐料的饮料2.5 测试主类3 例子升华4 总结4.1 核心角色4.2 核心代码结构 1 介绍 允许向一个现有的对象添加新的功能,同时又不改变其结构。 2 例子 假设一个饮品店卖饮料,各个饮料口味不同(多糖、少糖、加奶、不加奶)价格也不一样。 2.1 饮料抽象类 //饮料的抽象类 interface Drink { int cost();原创 2020-11-13 10:33:20 · 219 阅读 · 0 评论 -
实战java设计模式(八)桥接模式
目录1 介绍2 例子2.1 颜色抽象接口2.2 颜色实现2.3 手机抽象类2.4 手机实现2.5 测试主类3 总结 1 介绍 将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。用树形结构和乘法去理解。 2 例子 使用一个手机都有颜色的情况。比如手机有两种苹果和华为,手机都有红色、蓝色、绿色。如果每一种组合都要写一个类的话,就需要写6个类,成本较高,可以考虑使用桥接模式。把继承换成组合、聚合的方式。 2.1 颜色抽象接口 //颜色抽象类 int原创 2020-11-13 10:15:02 · 125 阅读 · 0 评论 -
实战java设计模式(七)适配器模式
目录1 介绍2 类适配器2.1 例子2.1.1 原电源类(220V)2.1.2 适配接口2.1.3 适配器类2.1.4 测试主类2.2 核心角色2.3 核心代码结构3 对象适配器3.1 例子3.1.1 被适配类3.1.2 适配接口3.1.3 适配器3.1.4 测试主类3.2 核心角色3.3 核心代码结构4 接口适配器4.1 例子4.1.2 接口适配器4.1.3 适配器使用类4.2 核心代码结构5 总结 1 介绍 适配器模式将一个类的接口转换成客户希望的另外一个接口。 2 类适配器 2.1 例子 使用一个22原创 2020-11-13 09:48:34 · 222 阅读 · 0 评论 -
实战java设计模式(六)建造者模式
目录1 介绍2 例子2.1 自行车类2.2 抽象建造者2.3 具体生产商2.4 指挥生产者2.5 测试主类3 例子升华4 总结4.1 核心角色4.2 核心代码结构 1 介绍 使用多个简单的对象一步一步构建成一个复杂的对象。实现对象设计和创建解耦。 2 例子 假设要不同厂商生产不同牌子的自行车。 2.1 自行车类 //自行车类 class Bicycle { private String type;//自行车的类型:电动的、非电动的 private String color;//颜色原创 2020-11-12 22:13:40 · 164 阅读 · 0 评论 -
实战java设计模式(五)原型模式
目录1 介绍2 例子(实现Cloneable接口)2.1 课程类2.2 学生类2.3 测试主类3 反序列化方法3.1 课程类(可序列化即可)3.2 学生类4 总结 1 介绍 用于创建重复的对象,同时又能保证性能。说白了,就是解决对象的复制问题,希望通过Object.clone()直接返回一个复制的对象,注意!!是深拷贝。 2 例子(实现Cloneable接口) 用一个学生类来做实验,学生类里面组合了一个课程。 2.1 课程类 //课程类 class Course implements Cloneable {原创 2020-11-12 20:50:28 · 102 阅读 · 0 评论 -
实战java设计模式(四)抽象工厂模式
承上:实战java设计模式(三)工厂方法模式 这里写目录标题1 介绍2 例子2.1 手机接口2.2 实现手机类2.3 充电器接口2.4 充电器实现2.5 抽象工厂接口2.6 工厂实现2.7 测试主类3 例子升华4 总结4.1 核心角色4.2 核心结构 1 介绍 工厂方法模式的问题是每一个工厂只能生产一种产品。试想这样一个场景一个厂要生产螺丝的同时要配对生产螺丝冒,生产乒乓球的同时配对生产乒乓球盒,生产产品的时候同时配对生产产品包装。 2 例子 还是手机生产的例子,但是生产手机的同时需要生产配对的手机充电器。原创 2020-11-12 19:37:33 · 189 阅读 · 0 评论 -
实战java设计模式(三)工厂方法模式
承上:实战java设计模式(二)简单工厂模式 目录1 介绍2 例子2.1 手机接口2.2 手机类实现2.3 工厂父类2.4 工厂实现2.5 测试主类3 例子升华4 总结4.1 核心角色4.2 核心代码结构 1 介绍 回顾简单工厂模式,存在的问题产品和工厂存在违反了开闭原则,即增加了产品类,必须在工厂类中添加注册。工厂方法模式就是为了解决这样的问题。实现产品和工厂的解耦。 2 例子 以手机生产工厂生产手机为例子,手机有展示logo的功能,有华为、苹果、小米三种手机需要生产。 2.1 手机接口 //手机接口 i原创 2020-11-12 17:04:02 · 288 阅读 · 3 评论 -
实战java设计模式(二)简单工厂模式
目录1 介绍2 例子2.1 手机接口2.2 具体手机类(实现手机接口)2.3 建立一个手机工厂2.4 测试主类3 例子升华3.1 手机接口3.2 手机类3.3 工厂类4 工厂模式总结4.1 工厂模式核心角色4.2 工厂模式核心代码结构 1 介绍 工厂模式提供了一种创建对象的最佳方式。 2 例子 使用工厂模式,按照指定手机品牌的名字生产一个手机对象。 2.1 手机接口 手机接口定义了手机应该具有的具体功能,本例仅仅做了手机显示logo的功能。 //手机接口 interface Phone{ //显示l原创 2020-11-12 11:11:08 · 350 阅读 · 3 评论 -
实战java设计模式(一)单例模式
目录1 介绍2 实现方式2.1 饿汉式(静态变量)2.2 饿汉式(静态代码块)2.3 懒汉式(线程不安全)2.4 懒汉式(线程安全)2.5 双重校验锁2.6 静态内部类方式2.7 枚举方式3 总结 1 介绍 单例模式属于创建型模式。单例模式创建的单例类只能有一个实例,并且是自己创建自己的唯一实例。 使用场景:整个项目的配置类、项目的工具类等等。 2 实现方式 实现关键步骤: 构造器私有化;(不让别人new) 持有一个自己类型的引用;(怎么创建按照具体方法来) 返回一个具体实例的方法;(给别人使用) 同时原创 2020-11-12 10:06:22 · 230 阅读 · 3 评论 -
实战java设计模式(零)七大原则
23种设计模式是有其具体的实现依据的,既然别的程序可以按照23种设计模式的方法进行设计,那么这23种设计模式又是按照什么依据设计的呢?没错就是七大原则。 序号 原则名称 解释 我的理解 1 单一职责原则 一个类只负责一项职责 这是在类的设计层面,也符合类抽象、封装的特性 2 接口隔离原则 实现类不应该依赖它不实现的接口方法 只要依赖了某个接口,就应该实现里面所有抽象方法 3 依赖倒转原则 类之间的依赖应该依赖其抽象 面向接口编程 4 里氏替换原则 引用基类的地方必须能透明地使用其原创 2020-11-12 09:25:02 · 192 阅读 · 4 评论 -
自学java设计模式(持续更新)
基于白嫖B站尚硅谷视频:尚硅谷Java设计模式(图解+框架源码剖析) 目录1 写在前面2 七大原则2.1 单一职责原则2.1.1 基本介绍2.1.2 应用实例2.2 接口隔离原则2.3 依赖倒转(倒置)原则2.4 里氏替换原则2.5 开闭原则2.6 迪米特法则2.7 合成复用原则三级目录 1 写在前面 由Erich Gamma等人在1990年代由建筑设计领域引入到计算机科学领域; 七大原则; 23种设计模式; 高内聚,低耦合; 设计模式设计的七大原则; 2 七大原则 2.1 单一职责原则 2.1.1 基原创 2020-11-11 20:39:06 · 223 阅读 · 1 评论