![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 74
设计模式
95年的巨蟹
机械boy
展开
-
设计模式的个人记忆方法
设计模式的个人记忆方法 设计模式的三种类型 共23种: 创建型模式:单例模式、抽象工厂模式、原型模式、建造者模式、工厂模式 结构性模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式 行为型模式:模板方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter 模式)、状态模式、策略模式、责任链模式(职责链模式) 记忆方法:(个人理解,如有其他想法欢迎评论沟通) 共23种,创建型、结构型、行为型:5、7、11。(1357911)奇原创 2021-11-30 15:34:17 · 395 阅读 · 1 评论 -
设计模式——职责链模式
设计模式——职责链模式 学校OA系统的采购审批项目:需求是 采购员采购教学器材 如果金额 小于等于5000, 由教学主任审批 (0<=x<=5000) 如果金额 小于等于10000, 由院长审批 (5000<x<=10000) 如果金额 小于等于30000, 由副校长审批 (10000<x<=30000) 如果金额 超过30000以上,有校长审批 ( 30000<x) 请设计程序完成采购审批项目 传统方案解决OA系统审批问题分析 传统方式是原创 2021-11-29 14:22:30 · 89 阅读 · 0 评论 -
设计模式——策略模式
设计模式——策略模式 编写鸭子项目,具体要求如下: 有各种鸭子(比如 野鸭、北京鸭、水鸭等, 鸭子有各种行为,比如 叫、飞行等) 显示鸭子的信息 传统的方式实现的问题分析和解决方案 其它鸭子,都继承了Duck类,所以fly让所有子类都会飞了,这是不正确的 上面说的1 的问题,其实是继承带来的问题:对类的局部改动,尤其超类的局部改动,会影响其他部分。会有溢出效应 为了改进1问题,我们可以通过覆盖fly 方法来解决 => 覆盖解决 问题又来了,如果我们有一个玩具鸭子ToyDu原创 2021-11-29 11:02:27 · 229 阅读 · 0 评论 -
设计模式——状态模式
设计模式——状态模式 问题: 状态模式 基本介绍 状态模式(State Pattern):它主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题。状态和行为是一一对应的,状态之间可以相互转换 当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类 对原理类图的说明-即(状态模式的角色及职责) Context 类为环境角色, 用于维护State实例,这个实例定义当前状态 State 是抽象状态角色,定义一个接口封装与Context 的一个特点接口相关行为原创 2021-11-26 18:00:56 · 293 阅读 · 0 评论 -
设计模式——解释器模式
设计模式——解释器模式 四则运算问题 通过解释器模式来实现四则运算,如计算a+b-c的值,具体要求 先输入表达式的形式,比如 a+b+c-d+e, 要求表达式的字母不能重复 在分别输入a ,b, c, d, e 的值 传统方案解决四则运算问题分析 编写一个方法,接收表达式的形式,然后根据用户输入的数值进行解析,得到结果 问题分析:如果加入新的运算符,比如 * / ( 等等,不利于扩展,另外让一个方法来解析会造成程序结构混乱,不够清晰. 解决方案:可以考虑使用解释器模式, 即: 表达式原创 2021-11-26 17:19:44 · 73 阅读 · 0 评论 -
设计模式——备忘录模式
//需要保存状态的原始对象 @Data public class Originator { private String state; public Memento saveStateMemento(){ return new Memento(state); } //通过备忘录 恢复; public void getStateFromMemento(Memento memento){ state = memento.getState(); } } //备忘录对象;负责 保存好记录,原创 2021-11-26 16:01:45 · 1992 阅读 · 0 评论 -
设计模式——中介者模式
设计模式——中介者模式 租房子: 加中介: 基本介绍 1. 中介者模式(Mediator Pattern),用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互 中介者模式属于行为型模式,使代码易于维护 比如MVC模式,C(Controller控制器)是M(Model模型)和V(View视图)的中介者,在前后端交互时起到了中间人的作用 应用案例类图: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直原创 2021-11-26 15:15:41 · 71 阅读 · 0 评论 -
设计模式——观察者模式
设计模式——观察者模式 天气预报项目需求,具体要求如下: 气象站可以将每天测量到的温度,湿度,气压等等以公告的形式发布出去(比如发布到自己的网站或第三方)。 需要设计开放型API,便于其他第三方也能接入气象站获取数据。 提供温度、气压和湿度的接口 测量数据更新时,要能实时的通知给第三方 传统方案: //接入方 public class CurrentConditions { private float temperature; private float pressure原创 2021-11-25 17:47:37 · 195 阅读 · 0 评论 -
设计模式——迭代器模式
设计模式——迭代器模式 需求: 编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系。如图: 传统的方式的问题分析 将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的 实际上我们的要求是 :在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系, 因此这种方案,不能很好实现的遍历的操作 解决方案:=> 迭代器模式 基本介绍 迭代器模式(Iterator Pattern)是常用原创 2021-11-25 14:59:58 · 87 阅读 · 0 评论 -
设计模式——访问者模式
设计模式——访问者模式 1.完成测评系统需求 将观众分为男人和女人,对歌手进行测评,当看完某个歌手表演后,得到他们对该歌手不同的评价(评价 有不同的种类,比如 成功、失败 等) 传统方式的问题分析 如果系统比较小,还是ok的,但是考虑系统增加越来越多新的功能时,对代码改动较大,违反了ocp原则, 不利于维护 扩展性不好,比如 增加了 新的人员类型,或者管理方法,都不好做 引出我们会使用新的设计模式 – 访问者模式 2.访问者模式基本介绍 1.访问者模式(Visitor Pattern原创 2021-11-25 11:21:42 · 394 阅读 · 0 评论 -
设计模式——命令模式
设计模式——命令模式 1.智能生活项目需求 看一个具体的需求 我们买了一套智能家电,有照明灯、风扇、冰箱、洗衣机,我们只要在手机上安装app就可以控制对这些家电工作。 这些智能家电来自不同的厂家,我们不想针对每一种家电都安装一个App,分别控制,我们希望只要一个app就可以控制全部智能家电。 要实现一个app控制所有智能家电的需要,则每个智能家电厂家都要提供一个统一的接口给app调用,这时 就可以考虑使用命令模式。 命令模式可将“动作的请求者”从“动作的执行者”对象中解耦出来. 在我们的原创 2021-11-17 15:13:07 · 68 阅读 · 0 评论 -
设计模式——模板方法模式
设计模式——模板方法模式 豆浆制作问题 编写制作豆浆的程序,说明如下: 制作豆浆的流程 选材—>添加配料—>浸泡—>放到豆浆机打碎 通过添加不同的配料,可以制作出不同口味的豆浆 选材、浸泡和放到豆浆机打碎这几个步骤对于制作每种口味的豆浆都是一样的 请使用 模板方法模式 完成 (说明:因为模板方法模式,比较简单,很容易就想到这个方案,因此就直接使用,不再使用传统的方案来引出模板方法模式 ) 模板方法模式基本介绍 基本介绍 模板方法模式(Template Method原创 2021-11-16 17:37:12 · 337 阅读 · 0 评论 -
设计模式——代理模式
设计模式——代理模式 1.代理模式介绍: 代理模式的基本介绍 代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。 被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象 代理模式有不同的形式, 主要有三种 静态代理、动态代理 (JDK代理、接口代理)和 Cglib代理 (可以在内存动态的创建对象,而不需要实现接口, 他是属于动态代理的范畴)。 2.静态代码模式的原创 2021-11-16 16:32:22 · 56 阅读 · 0 评论 -
设计模式——享元模式
设计模式——享元模式 1.展示网站项目需求 小型的外包项目,给客户A做一个产品展示网站,客户A的朋友感觉效果不错,也希 望做这样的产品展示网站,但是要求都有些不同: 有客户要求以新闻的形式发布 有客户人要求以博客的形式发布 有客户希望以微信公众号的形式发布 传统方案解决网站展现项目-问题分析 需要的网站结构相似度很高,而且都不是高访问量网站,如果分成多个虚拟空间来 处理,相当于一个相同网站的实例对象很多,造成服务器的资源浪费 解决思路:整合到一个网站中,共享其相关的代码和数据,对于硬原创 2021-11-16 11:11:57 · 96 阅读 · 0 评论 -
设计模式——外观模式
设计模式——外观模式 1.影院管理项目 组建一个家庭影院: DVD播放器、投影仪、自动屏幕、环绕立体声、爆米花机,要求完成使用家庭影院的 功能,其过程为: • 直接用遥控器:统筹各设备开关 • 开爆米花机 • 放下屏幕 • 开投影仪 • 开音响 • 开DVD,选dvd • 去拿爆米花 • 调暗灯光 • 播放 • 观影结束后,关闭各种设备 传统方案: 传统方式解决影院管理问题分析 在ClientTest 的main方法中,创建各个子系统的对象,并直接去调用子系统(对象) 相关方法,会造成调用过程混乱,没原创 2021-11-15 17:11:02 · 54 阅读 · 0 评论 -
设计模式——组合模式
设计模式——组合模式 1.需求案例: 传统方案解决学校院系展示存在的问题分析 将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的 实际上我们的要求是 :在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系, 因此这种方案,不能很好实现的管理的操作,比如对学院、系的添加,删除,遍历等 解决方案:把学校、院、系都看做是组织结构,他们之间没有继承的关系,而是一个树形结构,可以更好的实现管理操作。 => 组合模式 2.组合模式基本介绍 基本介绍原创 2021-11-15 15:14:23 · 69 阅读 · 0 评论 -
设计模式——装饰者模式
装饰者模式 星巴克咖啡订单项目 星巴克咖啡订单项目(咖啡馆): 咖啡种类/单品咖啡:Espresso(意大利浓咖啡)、ShortBlack、LongBlack(美式 咖啡)、Decaf(无因咖啡) 调料:Milk、Soy(豆浆)、Chocolate 要求在扩展新的咖啡种类时,具有良好的扩展性、改动方便、维护方便 使用OO的来计算不同种类咖啡的费用:客户可以点单品咖啡,也可以单品咖啡+调料组合。 传统思路: 问题:会发生类爆炸; 问题:可以控制类的数量;增删调料种类不方便; 装饰者模式原创 2021-11-15 10:58:17 · 495 阅读 · 0 评论 -
设计模式——桥接模式
桥接模式 传统方案解决手机操作问题 桥接模式原理图: 代码实现: //抽象的 品牌接口 public interface Brand { void open(); void close(); void call(); } //vivo 品牌 public class Vivo implements Brand{ @Override public void open() { System.out.println("Vivo手机开机");原创 2021-11-12 17:06:16 · 598 阅读 · 0 评论 -
设计模式——适配器模式
适配器模式 1.适配器模式基本介绍 适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表 示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同 工作。其别名为包装器(Wrapper) 适配器模式属于结构型模式 主要分为三类:类适配器模式、对象适配器模式、接口适配器模式 2. 适配器工作原理 工作原理 1)适配器模式:将一个类的接口转换成另一种接口.让原本接口不兼容的类可以兼容 2)从用户的角度看不到被适配者,是解耦的 3)用户调用适配器转化原创 2021-11-12 15:21:12 · 99 阅读 · 0 评论 -
设计模式——建造者模式
设计模式建造者模式:1.代码:2.建造者模式的注意事项和细节: 建造者模式: 盖房项目需求: 需要建房子:这一过程为打桩、砌墙、封顶 房子有各种各样的,比如普通房,高楼,别墅,各种房子的过程虽然一样,但是 要求不要相同的. 请编写程序,完成需求. 传统方案:略 基本介绍: 建造者模式(Builder Pattern) 又叫生成器模式,是一种对象构建模式。它可以 将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方 法可以构造出不同表现(属性)的对象。 建造者模式 是一步一步创建一个复杂原创 2021-10-22 15:24:09 · 68 阅读 · 0 评论 -
设计模式——原型模式
设计模式:原型模式:传统方式解决克隆羊问题:1. 原型模式-基本介绍:代码2. 深拷贝(拷贝对象中存在引用类型)方式一:使用克隆方法进行深拷贝:方式二:通过对象序列化实现:原型模式的注意事项和细节: 原型模式: 克隆羊问题: 现在有一只羊tom,姓名为: tom, 年龄为:1,颜色为:白色,请编写程序创建和tom 羊 属性完全相同的10只羊。 传统方式解决克隆羊问题: 传统的方式的优缺点 优点是比较好理解,简单易操作。 在创建新的对象时,总是需要重新获取原始对象的属性,如果创建的对象比较复杂 时,效率较低原创 2021-10-21 15:44:31 · 55 阅读 · 0 评论 -
设计模式——工厂模式(简单工厂、工厂方法、抽象工厂)
工厂模式1.1.简单工厂模式普通实现方法:传统的方式的优缺点:简单工厂模式代码示例:1.2工厂方法模式:代码:1.3抽象工厂模式代码:工厂模式小结: 1.1.简单工厂模式 需求 看一个披萨的项目:要便于披萨种类的扩展,要便于维护 披萨的种类很多(比如 GreekPizza、CheesePizza 等) 披萨的制作有 prepare,bake, cut, box 完成披萨店订购功能。 普通实现方法: pizza抽象类: /** * Description:pizza 两种pizza的抽象类 *原创 2021-10-19 16:03:25 · 89 阅读 · 0 评论 -
设计模式——单例设计模式8种方式
这里写目录标题设计模式:设计模式的三种类型1.单例模式饿汉式(静态常量)饿汉式(静态代码块)懒汉式(线程不安全)懒汉式(线程安全,同步方法)懒汉式(线程安全,同步代码块)懒汉式(线程安全,同步代码块) 双重检查静态内部类2.单例模式注意事项和细节说明 设计模式: 设计模式的三种类型 共23种: 创建型模式:单例模式、抽象工厂模式、原型模式、建造者模式、工厂模式 结构性模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、 享元模式、代理模式 行为型模式:模板方法模式、命令模式、访问者模式、迭代器模原创 2021-10-15 14:37:31 · 259 阅读 · 0 评论 -
设计模式七大原则
设计模式七大原则 一、设计模式的优点: 代码重用性(相同代码不用多次编写) 可读性(代码规范性) 可扩展性(增加新功能方便,便于维护) 可靠性(增加新功能 对原功能无影响) 使程序呈现高内聚,低耦合的特性 二、设计模式七大原则: 1.单一职责原则 降低类的复杂度,一个类只负责一个职责; 提高可读性、可维护性 降低变更成本及风险 2.接口隔离原则 客户端不应该依赖它不需要的接 口,即一个类对另一个类的依赖 应该建立在最小的接口上 3.依赖倒转原则 依赖倒转原则的注意事项和细节: 低层模块尽量都要原创 2021-10-14 17:59:10 · 93 阅读 · 0 评论