
设计模式
白不懂黑的静
纸上得来终觉浅 绝知此事要躬行
展开
-
设计模式---职责链模式(Chain of Responsibility Pattern)
目录1、学校 OA系统采购审批需求2、传统方式解决审批流程3、传统 方式 问题分析4、职责链模式基本介绍5、职责链模式原理类图6、职责链模式解决OA采购审批7、职责链模式在SpringMVC源码中的应用8、注意事项和细节1、学校 OA系统采购审批需求采购员采购教学器材,审批流程如下 :金额小于5000,由教学主任审批。 金额大于等于5000小于10000,由院长审批。 金额大于等于1000小于30000,由副校长审批。 金额大于等于30000,由校长审.原创 2020-08-15 17:00:09 · 743 阅读 · 0 评论 -
设计模式---策略模式(Strategy Pattern)
目录1、鸭子项目需求2、传统方案解决3、传统方案问题分析4、策略模式基本介绍5、策略模式的原理类图6、策略模式解决鸭子问题7、策略模式在JDK-Arrays中的源码应用8、注意事项和细节1、鸭子项目需求有各种鸭子(比如:北京鸭,野鸭,玩具鸭等),鸭子又有各种行为(叫、游泳、飞翔)。 显示鸭子信息2、传统方案解决如上图所示,编写抽象父类安排鸭子的公共行为,其它具体的子类继承之。代码实现:package com.mayun.study.desi.原创 2020-08-15 09:02:35 · 301 阅读 · 0 评论 -
设计模式---状态模式(State Pattern)
目录1、App抽奖活动问题2、状态模式基本介绍3、原理类图4、状态模式解决APP抽奖活动问题5、注意事项和细节1、App抽奖活动问题请编写程序完成APP抽奖活动,具体抽奖要求如下:假如没参加一次这个活动要扣除用户50积分,中奖概率是10% 奖品数量有限,抽完就不能抽奖了 活动有四个状态:可以抽奖、不能抽奖、发放奖品和奖品领完。 活动的四个状态转换关系如下图:2、状态模式基本介绍状态模式基本介绍(State pattern):主要用来解决对象在多个状..原创 2020-08-14 22:51:41 · 167 阅读 · 0 评论 -
设计模式---解释器模式(Interpreter Pattern)
目录1、四则运算问题2、传统方案解决四则运算问题分析3、解释器模式基本介绍4、解释器模式的原理类图5、解释器模式来实现四则运算6、注意事项和细节1、四则运算问题 通过解释器模式来实现四则运算,如计算a+b-c的值,具体要求:先输入表达式的形式,比如a+b-c+d-e,要求表达式的字母不能重复; 再分别输入a,b,c,d,e的值 最后求出结果:如图2、传统方案解决四则运算问题分析编写一个方法,接收表达式的形式,然后根据用户输入的数值进行解析,得到...原创 2020-08-14 21:46:53 · 333 阅读 · 0 评论 -
设计模式---备忘录模式(Memento Pattern)
1、游戏角色状态恢复问题游戏角色有攻击力和防御力,在大战Boss前保存自身的状态(攻击力和防御力),当大战Boss后攻击力和防御力下降,从备忘录对象恢复到大战前的状态。2、传统方案解决游戏角色恢复3、传统方式的问题分析一个对象,就对应一个保存对象状态的对象,这样当我们游戏的对象很多时,不利于管理,开销很大。 传统的方式是简单地做备份,new 出另外一个对象出来,再把需要备份的数据放到这个新对象,但这就保留了对象内部的细节 解决方案:备忘录模式。4、备忘录模式的基本介绍备忘录模式原创 2020-08-13 22:29:37 · 255 阅读 · 0 评论 -
设计模式---中介者模式(Mediator Pattern)
目录1、智能家庭项目2、传统方案解决3、传统方案问题分析4、中介者模式基本介绍5、中介者模式原理类图6、中介者模式应用实例7、注意事项和细节1、智能家庭项目智能家庭包括各种智能设备:闹钟、咖啡机、电视机、窗帘等 主要要看电视时,各个设备可以协同工作,自动完成看电视的准备工作,比如流程为:闹钟响起-》咖啡机开始做咖啡-》窗帘自动落下-》电视机开始播放。2、传统方案解决传统设计:各设备各自有自己独立的类,应用时,各对象间相互调用相互的接口进行交流控制。.原创 2020-08-12 22:04:27 · 271 阅读 · 0 评论 -
设计模式---观察者模式(Observer Pattern)
目录1、天气预报项目需求2、天气预报设计方案1-普通方案3、观察者模式原理4、观察者模式解决天气预报需求5、观察者模式在JDK应用的源码分析1、天气预报项目需求气象站可以将每天测量到的温度、湿度、气压等以公告的形式发布出去(比如发布到自己的网站或第三方)。 需要设计开放型API,便于其它第三方也能接入气象站获取数据。 提供温度、湿度和气压的接口。 测量数据更新时,要能实时的通知第三方。2、天气预报设计方案1-普通方案通过需求分析,我们初步设计出一个WeathDa.原创 2020-08-12 20:48:24 · 203 阅读 · 0 评论 -
设计模式---迭代器模式
目录1、具体需求2、传统的设计方案3、传统方式的问题分析4、迭代器模式基本介绍5、迭代器模式原理类图6、迭代器模式应用实例7、迭代器模式在JDK-ArrayList中的应用8、迭代器模式注意事项及细节1、具体需求编写程序,展示一个学校院系结构,需求是这样的,要在一个页面中展现出学校的院系组成,一个学校有多个学院,一个学院有多个系。2、传统的设计方案3、传统方式的问题分析将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层.原创 2020-08-11 23:59:46 · 976 阅读 · 0 评论 -
设计模式---访问者模式(Visitor Pattern)
目录1、测评系统的需求2、访问者模式基本介绍3、访问者模式原理类图4、访问者模式应用实例5、注意事项和细节1、测评系统的需求观众有男人和女人,对歌手进行测评打分,当看完某个歌手表演后,得到他们对歌手不同的评价(评价有不同 的类别:比如成功,失败等)2、访问者模式基本介绍访问者模式(Visitor Pattern),封装一些作用于某些数据结构的各元素的操作,它可以在不改变数据结构的前提下,定义作用这些元素的新的操作。 主要将数据结构与数据操作分离,对数据结构和数据操.原创 2020-08-10 23:32:00 · 267 阅读 · 0 评论 -
设计模式---命令模式(Command Pattern)
目录1、智能生活项目需求2、命令模式基本介绍3、命令模式的原理类图4、命令模式解决智能生活项目5、命令模式的注意事项和细节1、智能生活项目需求我们买了一套智能家电,有照明灯、风扇、冰箱等等,我们只要在手机上安装app就可以控制对这些家电的工作。 这些智能家电来自不同的厂家,我们不想针对每一种家电都安装一个APP,分别控制,我们希望只要一个app就能控制全部智能家电。 要实现一个app控制所有智能家电的需求,则每个智能家电厂家都要提供一个统一的接口app调用,这时 就.原创 2020-08-10 22:09:25 · 252 阅读 · 0 评论 -
设计模式---模板方法代理(Template Method Pattern)
目录1、豆浆制作问题2、模板方法模式基本介绍3、模板方法模式原理类图4、模板方法模式解决豆浆制作问题5、模板方法模式的钩子方法6、模板方法在Spring框架中应用的源码分析7、模板方法模式注意事项和细节1、豆浆制作问题编写制作豆浆程序,说明如下:制作豆浆的流程:选材--》添加配料--》浸泡--》放到豆浆机打碎 通过添加不同的配料,可以制作出不同口味的豆浆 选材、浸泡和放到豆浆机打碎这几个步骤对于制作每种口味的豆浆都是一样的 请使用模板方法模式完成。2、模.原创 2020-08-09 22:59:23 · 180 阅读 · 0 评论 -
设计模式---代理模式(Proxy)
目录1、代理模式(Proxy)2、静态代理2.1、静态代理基本介绍2.2、应用实例2.3、静态代理的优缺点3、动态代理3.1、动态代理的基本介绍3.2、JDK中生成代理对象的API3.3、动态代理的应用实例4、Cglib代理4.1、Cglib代理的基本介绍4.2、Cglib模式实现步骤4.3、Cglib模式应用实例5、几种常见代理模式的介绍--几种变体1、代理模式(Proxy)代理模式:为一个对象提供一个替身,以控制对这个类的访问。即通..原创 2020-08-09 00:26:45 · 404 阅读 · 0 评论 -
设计模式---享元模式
1、展示网站项目需求 有一个小型的外包项目,给客户A做一个网站,客户A的朋友感觉网站不错,也希望做这样搞一个类似的网站,但要求是有差异的:有客户要求以新闻的形式发布 有客户要求以博客的形式发布 有客户要求以微信公众号的形式发布2、传统方案解决网站项目需求直接复制粘贴一份,然后根据客户要求不同,再进行修改。 给每个网站租用一个空间。 方案设计示意图:3、传统方案问题分析需要的网站相似度很高,而且都不是高访问量的网站,如果分成多个虚拟空间来处理,相当于一个相同网站的实例对象..原创 2020-08-08 18:12:19 · 226 阅读 · 0 评论 -
设计模式---外观模式(Facade)
目录1、影院管理项目2、传统方式解决影院管理项目3、传统方式解决影院管理项目问题分析4、外观模式基本介绍5、外观模式原理图6、外观模式解决影院管理项目7、外观模式的注意事项和细节1、影院管理项目需要组建一个家庭影院:有这些设备:DVD播放器、投影仪、自动屏幕、环绕立体声、爆米花机,要求完成组建家庭影院的功能,其过程为:开爆米花机-》放下屏幕-》开投影仪-》开音响-》开DVD,选dvd-》去拿爆米花-》调暗灯光-》播放-》观影结束后,关闭各种设备2、传.原创 2020-08-08 10:14:24 · 232 阅读 · 0 评论 -
设计模式---组合模式(Composition Pattern)
目录1、实际的一个业务需求2、传统方案解决3、传统方案存在问题分析4、组合模式的基本介绍5、组合模式原理类图7、组合模式在JDK集合中的应用8、组合模式的注意事项和细节1、实际的一个业务需求编写程序展现一个学校院系结构:需求是这样的,要在一个页面中展现出学校的院系组成,一个学校有多个学院,一个学院有多个系。如图:2、传统方案解决3、传统方案存在问题分析将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的 实际上我们要求.原创 2020-08-04 17:46:00 · 702 阅读 · 0 评论 -
设计模式---装饰者模式
目录1、咖啡订单项目2、方案1-解决咖啡订单项目3、方案1-解决咖啡订单项目问题分析4、方案2-解决咖啡订单项目(改进)5、方案2-解决咖啡订单项目问题分析6、装饰者定义7、装饰者模式原理8、装饰者模式解决咖啡订单项目9、装饰者模式下的订单:2份巧克力+一份牛奶的LongBlack10、装饰者模式咖啡订单项目应用实例11、装饰者模式在JDK应用的源码分析1、咖啡订单项目咖啡种类(单品咖啡):Espresso(意大利浓咖啡)、ShortBlack、Lo.原创 2020-08-04 15:41:43 · 161 阅读 · 0 评论 -
设计模式(Bridge)---桥接模式
目录1、 手机操作问题2、 传统方案解决手机操作问题3、传统方案解决手机操作问题分析4、桥接模式--基本介绍5、桥接模式--原理类图6、桥接模式解决手机操作问题7、桥接模式在JDBC的源码剖析8、桥接模式的注意事项和细节9、常见的应用场景1、 手机操作问题现在对不同类型的不同品牌实现操作编程(比如:开机、关机、上网、打电话等)如下图:2、 传统方案解决手机操作问题3、传统方案解决手机操作问题分析扩展性问题(类爆炸),如果我们再增加手机的样.原创 2020-07-24 17:28:09 · 188 阅读 · 0 评论 -
设计模式---适配器模式
1、现实生活中适配器的例子泰国插座用的是两孔的(欧标),可以买个多功能转换插头(适配器),这样就可以使用了。2、基本介绍适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主要目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以系统工作,其别名为包装器(Wrapper) 适配器模式属于结构型模式 主要分为三类:类适配器模式、对象适配器模式、接口适配器模式3、工作原理适配器模式:将一个类的接口转换成另一个接口,让原本接口不兼容的类可以兼容原创 2020-07-22 22:21:42 · 313 阅读 · 0 评论 -
设计模式---建造者模式
目录1、 盖房子需求2、传统方式解决盖房需求2.1、思路分析2.2、示例代码3、传统方式的问题分析4、建造者模式基本介绍5、建造者模式的四个角色6、建造者模式原理类图7、建造者模式解决盖房需求应用实例8、建造者模式在JDK的应用和源码分析9、建造者模式的注意事项和细节1、 盖房子需求需要建房子:过程有打桩、砌墙、封顶 房子有各种各样的,比如普通房,高楼,别墅,各种房子的过程虽然一样,但是要求各不相同。 请编写程序,完成需求。2、传统方...原创 2020-07-21 15:51:32 · 148 阅读 · 0 评论 -
设计模式---原型模式
1、克隆羊的问题现在有一只羊tom,姓名为:tom,年龄为:1,颜色为:白色,请编写程序创建和tom羊属性完全相同的10只羊。2、传统方式解决克隆羊的问题思路分析代码演示Client.javapackage com.mayun.study.designpattern.prototype;public class Client { public static void main(String[] args) { // TODO Auto-generat.原创 2020-07-20 23:04:57 · 253 阅读 · 0 评论 -
设计模式---工厂模式
1、简单工厂模式1.1 看一个具体的需求看一个披萨的项目:要便于披萨种类的扩展,要便于维护披萨的种类很多(比如 GreekPizz、CheesePizz等) 披萨的制作有prepare,bake,cut,box 完成披萨店订购功能。1.2 使用传统的方式来完成...原创 2020-07-19 20:40:13 · 232 阅读 · 0 评论 -
设计模式---单例模式
1、介绍所谓类的单例设计模式,就是采取一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)。比如Hibernate的SessionFactory,它充当数据存储源的代理,并负责创建Session对象,SessionFactory并不是轻量级的,一般情况下,一个项目通常只需要一个SessionFactory就够了,这时就会使用到单例模式。2、单例设计模式八种方式单例模式有八种方式:1 饿汉式(静态常量) 2 饿汉式原创 2020-07-17 16:07:54 · 169 阅读 · 0 评论 -
设计模式--23种设计模式
今天开始学习设计模式,先记录个总的。如下图所示,根据类型将设计模式分为创建型模式、结构型模式、行为型模式,然后其下又细分为各个设计模式。,原创 2020-07-17 11:35:23 · 124 阅读 · 0 评论 -
设计模式---七大原则
23种设计模式常用的七大原则:原创 2020-07-16 17:36:13 · 120 阅读 · 0 评论