设计模式
文章平均质量分 94
艺术与技术共舞
技术咖也可以有艺术的人生。
展开
-
设计模式(十五)--行为型模式:命令模式
一、智能生活项目需求看一个具体的需求1、我们买了一套智能家电,有照明灯、风扇、冰箱、洗衣机,我们只要在手机上安装 app就可以控制对这些家电工作。2、这些智能家电来自不同的厂家,我们不想针对每一种家电都安装一个 App,分别控制,我们希望只要一个app就可以控制全部智能家电。3、要实现一个app控制所有智能家电的需要,则每个智能家电厂家都要提供一个统一的接口给app调用,这时就可以考虑使用命令模式。4、命令模式可将“动作的请求者”从“动作的执行者”对象中解耦出来。5、在我们的例子中,动作原创 2021-11-01 17:17:50 · 368 阅读 · 0 评论 -
设计模式(十四)--行为型模式:模板方法模式
一、豆浆制作问题编写制作豆浆的程序,说明如下:1、制作豆浆的流程 选材—>添加配料—>浸泡—>放到豆浆机打碎 。2、通过添加不同的配料,可以制作出不同口味的豆浆。3、选材、浸泡和放到豆浆机打碎这几个步骤对于制作每种口味的豆浆都是一样的。4、请使用模板方法模式 完成。二、模板方法模式2.1.基本介绍1、模板方法模式(Template Method Pattern),又叫模板模式(Template Pattern),在一个抽象类公开定义了执行 它的方法的模板。它的子类原创 2021-10-29 16:45:29 · 281 阅读 · 0 评论 -
设计模式(十三)--结构型模式:代理模式
一、代理模式1.1.基本介绍1、代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象.这样做的好处,可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。2、被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象。3、代理模式有不同的形式, 主要有三种:静态代理、动态代理 (JDK 代理、接口代理)和 Cglib 代理 (可以在内存 动态的创建对象,而不需要实现接口, 它是属于动态代理的范畴) 。1.2.示意图二、静态代理2.1.原创 2021-10-27 11:45:34 · 158 阅读 · 0 评论 -
设计模式(十二)--结构型模式:享元模式
一、展示网站项目需求小型的外包项目,给客户 A 做一个产品展示网站,客户 A 的朋友感觉效果不错,也希望做这样的产品展示网 站,但是要求都有些不同:1、有客户要求以新闻的形式发布。2、有客户人要求以博客的形式发布。3、有客户希望以微信公众号的形式发布。二、传统方案解决网站展现项目1、 直接复制粘贴一份,然后根据客户不同要求,进行定制修改。2、给每个网站租用一个空间。3、方案设计示意图三、传统方案解决网站展现项目-问题分析1、需要的网站结构相似度很高,而且都不是高访问量原创 2021-10-26 15:47:35 · 127 阅读 · 0 评论 -
设计模式(十一)--结构型模式:外观模式
一、影院管理项目组建一个家庭影院:DVD 播放器、投影仪、自动屏幕、环绕立体声、爆米花机,要求完成使用家庭影院的功能,其过程为: 直接用遥控器:统筹各设备开关 开爆米花机 放下屏幕 开投影仪 开音响 开 DVD,选 dvd 去拿爆米花 调暗灯光 播放观影结束后,关闭各种设备。二、传统方式解决影院管理三、传统方式解决影院管理问题分析1、在 ClientTest 的 main 方法中,创建各个子系统的对象,并直接去调用子系统(对象)相关方法,会造成调用过程混乱,没有清晰的过程 。2、不利原创 2021-10-19 10:17:47 · 167 阅读 · 0 评论 -
设计模式(十)--结构型模式:组合模式
一、看一个学校院系展示需求编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院, 一个学院有多个系。如图二、传统方案解决学校院系展示(类图)三、传统方案解决学校院系展示存在的问题分析1、将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的 。2、 实际上我们的要求是 :在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系, 因此这种方案,不能很好实现的管理的操作,比如对学院、系的添加,删除,遍历原创 2021-10-18 16:08:09 · 122 阅读 · 0 评论 -
设计模式(九)--结构型模式:装饰模式
一、场景-星巴克咖啡订单项目1、咖啡种类/单品咖啡:Espresso(意大利浓咖啡)、ShortBlack、LongBlack(美式咖啡)、Decaf(无因咖啡) 。2、调料:Milk、Soy(豆浆)、Chocolate。3、要求在扩展新的咖啡种类时,具有良好的扩展性、改动方便、维护方便 。4、使用 OO 的来计算不同种类咖啡的费用: 客户可以点单品咖啡,也可以单品咖啡+调料组合。二、方案 1-解决星巴克咖啡订单项目2.1.实现2.2.问题分析1、 Drink 是一个抽象类,表示饮料原创 2021-10-18 11:31:32 · 135 阅读 · 0 评论 -
设计模式(八)--结构型模式:桥接模式
一、手机操作问题现在对不同手机类型的不同品牌实现操作编程(比如:开机、关机、上网,打电话等),如图:二、传统方案解决手机操作问题2.1.传统方案类图2.2.传统方案问题分析1、扩展性问题(类爆炸),如果我们再增加手机的样式(旋转式),就需要增加各个品牌手机的类,同样如果我们增加 一个手机品牌,也要在各个手机样式类下增加。2、违反了单一职责原则,当我们增加手机样式时,要同时增加所有品牌的手机,这样增加了代码维护成本。3、 解决方案-使用桥接模式。三、桥接模式(Bridge)3.1原创 2021-10-11 15:39:47 · 142 阅读 · 0 评论 -
设计模式(七)--结构型模式:适配器模式
一、现实生活中的适配器例子泰国插座用的是两孔的(欧标),可以买个多功能转换插头 (适配器) ,这样就可以使用了。二、基本介绍1、适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper) 。2、适配器模式属于结构型模式 。3、主要分为三类:类适配器模式、对象适配器模式、接口适配器模式。三、工作原理1、适配器模式:将一个类的接口转换成另一种接口,让原原创 2021-10-08 15:24:54 · 146 阅读 · 0 评论 -
设计模式(六)--创建型模式:建造者模式
一、盖房项目需求1、需要建房子:这一过程为打桩、砌墙、封顶 。2、 房子有各种各样的,比如普通房,高楼,别墅,各种房子的过程虽然一样,但是要求不要相同的。二、传统方式解决盖房需求2.1.类图2.2.代码实现创建一个抽象房子类,可以创建各种房子public abstract class AbstractHouse { //打地基 public abstract void buildBasic(); //砌墙 public abstract void b原创 2021-10-07 16:53:38 · 121 阅读 · 0 评论 -
设计模式(五)--创建型模式:原型模式
一、克隆羊问题现在有一只羊 tom,姓名为: tom, 年龄为:1,颜色为:白色,请编写程序创建和 tom 羊 属性完全相同的 10 只羊。二、传统方式解决克隆羊问题2.1.传统方式类图2.2.代码实现Sheep.javapublic class Sheep { private String name; private int age; private String color; public Sheep(String name, int age, S原创 2021-10-06 17:59:00 · 165 阅读 · 0 评论 -
设计模式(四)--创建型模式:工厂模式
一、简单工厂模式(静态工厂模式)1.1.具体的需求看一个披萨的项目:要便于披萨种类的扩展,要便于维护 。1、披萨的种类很多(比如 GreekPizz、CheesePizz 等) 。2、披萨的制作有 prepare,bake, cut, box 。3、 完成披萨店订购功能。1.2.传统的方式来完成类图将Pizza 类做成抽象的,因为每一种披萨的做法不一样public abstract class Pizza { protected String name; /原创 2021-09-29 11:01:02 · 84 阅读 · 0 评论 -
设计模式(三)--创建型模式:单例模式
一、单例设计模式介绍所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例, 并且该类只提供一个取得其对象实例的方法(静态方法)。比如 Hibernate 的 SessionFactory,它充当数据存储源的代理,并负责创建 Session 对象SessionFactory 并不是 轻量级的,一般情况下,一个项目通常只需要一个 SessionFactory 就够,这是就会使用到单例模式。二、单例设计模式八种方式(1)饿汉式(静态常量)(2)饿汉式(静原创 2021-09-28 11:40:39 · 89 阅读 · 0 评论 -
设计模式(二)--UML类图和设计模式概述
一、UML类图1.UML 基本介绍UML——Unified modeling language UML (统一建模语言),是一种用于软件系统分析和设计的语言工具,它用 于帮助软件开发人员进行思考和记录思路的结果。UML 本身是一套符号的规定,就像数学符号和化学符号一样,这些符号用于描述软件模型中的各个元素和他们之间的关系,比如类、接口、实现、泛化、依赖、组合、聚合等,如右图:用于描述系统中的类(对象)本身的组成和类(对象)之间的各种静态关系。类之间的关系:依赖、泛化(继承)、实现、关联原创 2021-09-26 15:41:55 · 2445 阅读 · 0 评论 -
设计模式(一)之--设计模式的七大原则详细介绍
一、设计模式的目的二、设计模式的七大原则1.单一职责原则1.1.介绍对类来说的,即一个类应该只负责一项职责。如类 A 负责两个不同职责:职责 1,职责 2。当职责 1 需求变更 而改变 A 时,可能造成职责 2 执行错误,所以需要将类 A 的粒度分解为 A1,A2。1.2.案例说明以交通工具案例讲解1.2.1 方式一在方式 1 的 run 方法中,违反了单一职责原则,解决的方案非常的简单,根据交通工具运行方法不同,分解成不同类即可。1.2.2 方式二1.3.案例优化1.4.原创 2021-09-23 16:36:55 · 117 阅读 · 0 评论