设计模式
设计模式
fu-jw
这个作者很懒,什么都没留下…
展开
-
【设计模式】--职责链模式
OA系统学校OA系统的采购审批项目:需求是采购员采购教学器材如果金额 小于等于5000, 由教学主任审批 (0<=x<=5000)如果金额 小于等于10000, 由院长审批 (5000<x<=10000)如果金额 小于等于30000, 由副校长审批 (10000<x<=30000)如果金额 超过30000以上,有校长审批 ( 30000<x)请设计程序完成采购审批项目传统方案接收到一个采购请求后,根据采购金额来调用对应的Approver (审批原创 2020-06-17 22:58:12 · 5376 阅读 · 0 评论 -
【设计模式】--策略模式
鸭子问题编写鸭子项目,具体要求如下:有各种鸭子(比如 野鸭、北京鸭、水鸭等, 鸭子有各种行为,比如 叫、飞行等)显示鸭子的信息传统方案public abstract class Duck { public Duck() { } public abstract void display();//显示鸭子信息 public void quack() { System.out.println("鸭子嘎嘎叫~~"); } pu原创 2020-06-17 22:57:46 · 5372 阅读 · 0 评论 -
【设计模式】--状态模式
APP抽奖请编写程序完成APP抽奖活动 具体要求如下:假如每参加一次这个活动要扣除用户50积分,中奖概率是10%奖品数量固定,抽完就不能抽奖活动有四个状态: 可以抽奖、不能抽奖、发放奖品和奖品领完活动的四个状态转换关系图状态模式基本介绍状态模式(State Pattern):它主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题。状态和行为是一一对应的,状态之间可以相互转换当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类模式原理Conte原创 2020-06-17 22:57:09 · 5319 阅读 · 0 评论 -
【设计模式】--解释器模式
四则运算通过解释器模式来实现四则运算,如计算a+b-c的值,具体要求先输入表达式的形式,比如 a+b+c-d+e, 要求表达式的字母不能重复在分别输入a ,b, c, d, e 的值最后求出结果:如图传统方法编写一个方法,接收表达式的形式,然后根据用户输入的数值进行解析,得到结果问题分析如果加入新的运算符,比如 * / ( 等等,不利于扩展,另外让一个方法来解析会造成程序结构混乱,不够清晰**解决方案:**可以考虑使用解释器模式, 即: 表达式 -> 解释器(可以有多种) -&原创 2020-06-17 22:56:17 · 5409 阅读 · 0 评论 -
【设计模式】--备忘录模式
游戏角色游戏角色有攻击力和防御力,在大战Boss前保存自身的状态(攻击力和防御力),当大战Boss后攻击力和防御力下降,从备忘录对象恢复到大战前的状态传统方案一个对象,就对应一个保存对象状态的对象问题分析一个对象,就对应一个保存对象状态的对象, 这样当我们游戏的对象很多时,不利于管理,开销也很大传统的方式是简单地做备份,new出另外一个对象出来,再把需要备份的数据放到这个新对象,但这就暴露了对象内部的细节解决方案: => 备忘录模式备忘录模式基本介绍备忘录模式(Memento原创 2020-06-17 22:55:15 · 5322 阅读 · 0 评论 -
【设计模式】--中介者模式
智能家居智能家居项目:智能家居包括各种设备,闹钟、咖啡机、电视机、窗帘 等主人要看电视时,各个设备可以协同工作,自动完成看电视的准备工作,比如流程为:闹铃响起->咖啡机开始做咖啡->窗帘自动落下->电视机开始播放...原创 2020-06-17 22:54:34 · 5332 阅读 · 0 评论 -
【设计模式】--观察者模式
天气预报天气预报项目需求,具体要求如下:气象站可以将每天测量到的温度,湿度,气压等等以公告的形式发布出去(比如发布到自己的网站或第三方)。需要设计开放型API,便于其他第三方也能接入气象站获取数据。提供温度、气压和湿度的接口测量数据更新时,要能实时的通知给第三方普通方案通过对气象站项目的分析,我们可以初步设计出一个WeatherData类通过getXxx方法,可以让第三方接入,并得到相关信息当数据有更新时,气象站通过调用dataChange() 去更新数据,当第三方再次获取时,就能原创 2020-06-16 21:55:08 · 5472 阅读 · 0 评论 -
【设计模式】--迭代器模式
学校院系编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系。如图:传统方案问题分析将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的实际上我们的要求是 :在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系, 因此这种方案,不能很好实现的遍历的操作(如学院的数据结构是数组,院系的数据结构是集合,则遍历方式就不同)解决方案:=> 迭代器模式迭代器模式基本介绍迭代器模式(It原创 2020-06-16 21:54:38 · 5335 阅读 · 0 评论 -
【设计模式】--访问者模式
测评系统将观众分为男人和女人,对歌手进行测评,当看完某个歌手表演后,得到他们对该歌手不同的评价(评价 有不同的种类,比如 成功、失败 等)传统方案在类man和women中分别编写代码逻辑并继承父类person问题分析如果系统比较小,还是ok的,但是考虑系统增加越来越多新的功能时,对代码改动较大,违反了ocp原则, 不利于维护扩展性不好,比如 增加了 新的人员类型,或者管理方法,都不好做可以使用新的设计模式 – 访问者模式访问者模式基本介绍访问者模式(Visitor Pattern)原创 2020-06-16 21:54:16 · 5321 阅读 · 0 评论 -
【设计模式】--命令模式
智能家居我们买了一套智能家电,有照明灯、风扇、冰箱、洗衣机,我们只要在手机上安装app就可以控制对这些家电工作这些智能家电来自不同的厂家,我们不想针对每一种家电都安装一个App,分别控制,我们希望只要一个app就可以控制全部智能家电要实现一个app控制所有智能家电的需要,则每个智能家电厂家都要提供一个统一的接口给app调用,这时 就可以考虑使用命令模式命令模式可将“动作的请求者”从“动作的执行者”对象中解耦出来,动作的请求者是手机app,动作的执行者是每个厂商的一个家电产品命令模式基本介绍原创 2020-06-16 21:53:36 · 5310 阅读 · 0 评论 -
【设计模式】--模板模式
豆浆制作编写制作豆浆的程序,说明如下:制作豆浆的流程 选材—>添加配料—>浸泡—>放到豆浆机打碎通过添加不同的配料,可以制作出不同口味的豆浆选材、浸泡和放到豆浆机打碎这几个步骤对于制作每种口味的豆浆都是一样的请使用 模板方法模式 完成模板模式基本介绍模板方法模式(Template Method Pattern),又叫模板模式(Template Pattern),在一个抽象类公开定义了执行它的方法的模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行模原创 2020-06-16 00:45:01 · 5307 阅读 · 0 评论 -
【设计模式】--代理模式
代理模式基本介绍代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象。这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象代理模式有不同的形式, 主要有三种 静态代理、动态代理 (JDK代理、接口代理)和 Cglib代理 (可以在内存动态的创建对象,而不需要实现接口, 他是属于动态代理的范畴)...原创 2020-06-16 00:44:37 · 5261 阅读 · 0 评论 -
【设计模式】--享元模式
展示网站小型的外包项目,给客户A做一个产品展示网站,客户A的朋友感觉效果不错,也希望做这样的产品展示网站,但是要求都有些不同:有客户要求以新闻的形式发布有客户人要求以博客的形式发布有客户希望以微信公众号的形式发布传统方案直接复制粘贴一份,给每个网站租用一个空间,然后根据客户不同要求,进行定制修改问题分析需要的网站结构相似度很高,而且都不是高访问量网站,如果分成多个虚拟空间来处理,相当于一个相同网站的实例对象很多,造成服务器的资源浪费解决思路: 整合到一个网站中,共享其相关的代码和原创 2020-06-14 23:53:39 · 5278 阅读 · 0 评论 -
【设计模式】--外观模式
影院管理组建一个家庭影院:DVD播放器、投影仪、自动屏幕、环绕立体声、爆米花机,要求完成使用家庭影院的功能,其过程为:直接用遥控器:统筹各设备开关开爆米花机放下屏幕开投影仪开音响开DVD,选dvd去拿爆米花调暗灯光播放观影结束后,关闭各种设备传统方式public class DVDPlayer { //使用单例模式, 使用饿汉式 private static DVDPlayer instance = new DVDPlayer(); public原创 2020-06-14 23:53:17 · 5288 阅读 · 0 评论 -
【设计模式】--组合模式
学校院系展示编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系。如图:传统方案系继承学院,学院继承学校问题分析将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的实际上我们的要求是 :在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系, 因此这种方案,不能很好实现的管理的操作,比如对学院、系的添加,删除,遍历等解决方案: 把学校、院、系都看做是组织结构,他们之间没有继承的关系,原创 2020-06-14 23:52:54 · 5287 阅读 · 0 评论 -
【设计模式】--装饰者模式
咖啡订单咖啡订单项目(咖啡馆):咖啡种类/单品咖啡:Espresso(意大利浓咖啡)、ShortBlack、LongBlack(美式咖啡)、Decaf(无因咖啡)调料:Milk、Soy(豆浆)、Chocolate要求在扩展新的咖啡种类时,具有良好的扩展性、改动方便、维护方便使用OO的来计算不同种类咖啡的费用: 客户可以点单品咖啡,也可以单品咖啡+调料组合。方案一将所有可能的组合都继承基类Drink问题分析Drink 是一个抽象类,表示饮料des就是对咖啡的描述, 比如咖啡的名字原创 2020-06-14 00:32:50 · 5475 阅读 · 0 评论 -
【设计模式】--桥接模式
手机案例现在对不同手机类型的不同品牌实现操作编程(比如: 开机、关机、上网,打电话等)传统方式不同样式的手机继承Phone类,不同品牌的手机分别继承不同的样式;问题分析扩展性问题(类爆炸),如果我们再增加手机的样式(旋转式),就需要增加各个品牌手机的类,同样如果我们增加一个手机品牌,也要在各个手机样式类下增加违反了单一职责原则,当我们增加手机样式时,要同时增加所有品牌的手机,这样增加了代码维护成本解决方案-使用桥接模式桥接模式基本介绍桥接模式(Bridge模式)是指:将实现与抽象原创 2020-06-14 00:32:22 · 5283 阅读 · 0 评论 -
【设计模式】--适配器模式
适配器模式插座问题不同国家的插座标准也不同,可以使用一个转换插头就可以轻松解决,该转换头即为适配器。基本介绍适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper)适配器模式属于结构型模式主要分为三类:类适配器模式、对象适配器模式、接口适配器模式工作原理将一个类的接口转换成另一种接口.让原本接口不兼容的类可以兼容从用户的角度看不到被适配者,是解耦的用原创 2020-06-13 16:20:35 · 5320 阅读 · 0 评论 -
【设计模式】--建造者模式
盖房项目需要建房子:这一过程为打桩、砌墙、封顶房子有各种各样的,比如普通房,高楼,别墅,各种房子的过程虽然一样,但是要求不要相同的.传统方式一个建房的抽象类及其具体的子类public abstract class AbstractHouse { //打地基 public abstract void buildBasic(); //砌墙 public abstract void buildWalls(); //封顶 public abstract void roofed()原创 2020-06-12 23:54:59 · 5669 阅读 · 0 评论 -
【设计模式】--原型模式
克隆羊问题现在有一只羊tom,姓名为: tom, 年龄为:1,颜色为:白色,请编写程序创建和tom羊 属性完全相同的4只羊。传统方式public class Sheep { private String name; private int age; private String color; public Sheep(String name, int age, String color) { super(); this.name =原创 2020-06-12 00:33:56 · 5258 阅读 · 0 评论 -
【设计模式】--工厂模式
举个例子一个披萨的项目:要便于披萨种类的扩展,要便于维护披萨的种类很多(比如 GreekPizz、CheesePizz 等)披萨的制作有 prepare,bake, cut, box完成披萨店订购功能传统方式完成一个pizza抽象类//将Pizza 类做成抽象public abstract class Pizza { protected String name; //名字 //准备原材料, 不同的披萨不一样,因此,我们做成抽象方法 public abstract void pr原创 2020-06-11 23:17:41 · 5240 阅读 · 0 评论 -
【设计模式】--单例模式
1、基本介绍单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)。比如Hibernate的SessionFactory,它充当数据存储源的代理,并负责创建Session对象。SessionFactory并不是轻量级的,一般情况下,一个项目通常只需要一个SessionFactory就够,这是就会使用到单例模式。2、八种实现方式饿汉式(静态常量)饿汉式(静态代码块)懒汉式(线程不安全)懒汉式(线程安全,同步方原创 2020-06-11 00:06:23 · 5233 阅读 · 0 评论 -
【设计模式】--UML基本介绍
UML基本介绍UML——Unified modeling language UML (统一建模语言),是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果UML本身是一套符号的规定,就像数学符号和化学符号一样,这些符号用于描述软件模型中的各个元素和他们之间的关系,比如类、接口、实现、泛化、依赖、组合、聚合等,如下图:1、UML图UML图分类:用例图(use case)静态结构图:类图、对象图、包图、组件图、部署图动态行为图:交互图(时序图与协作图)、状原创 2020-06-09 22:32:53 · 5447 阅读 · 0 评论 -
【设计模式】--设计模式概述及七大设计原则
单例模式的8种写法你知道吗?原创 2020-06-09 22:32:11 · 5303 阅读 · 0 评论