合集-设计模式

摘要:#### 接口隔离原则 ##### 介绍 客户端不要依赖不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上。 ##### 案例引入 A类,通过接口1依赖B类,C类通过依赖接口1依赖D类,A类只会用到1-3方法,C类只会使用到1,4,5方法。 ##### uml类图 ![](https:// 阅读全文
posted @ 2023-08-25 22:17 长名06 阅读(190) 评论(0) 推荐(0)
摘要:#### 设计模式的目的 编写软件过程中,程序员面临着来自,耦合性,内聚性以及可维护性,扩展性,重用性等方面的挑战。设计模式是为了让程序,具有更好的 - 1.代码重用性(相同代码,不用重复编写) - 2.可读性(编程规范性,便于其他程序员的阅读和理解) - 3.可扩展性(当需要增加新的功能时,非常的 阅读全文
posted @ 2023-08-21 21:30 长名06 阅读(275) 评论(0) 推荐(0)
摘要:依赖倒转原则 基本介绍 依赖倒转原则(Dependence Inversion Principle): 1.高层模块,不要依赖底层模块,二者都应该依赖其抽象。 2.抽象不应该依赖细节,细节应该依赖抽象。 3.依赖倒转的核心思想是面向接口编程。 4.依赖倒转原则基于这样的设计理念:相对于细节的多变,抽 阅读全文
posted @ 2023-08-27 22:01 长名06 阅读(118) 评论(0) 推荐(0)
摘要:里氏替换原则 OOP(Object Oriented Programming) 面向对象编程 OOP中的继承性的思考 1.继承包含这样一层含义,父类中凡是已经写好的方法,实际上就是设定规范。虽然不强制要求所有子类必须遵守规范(不重写方法),但是如果子类对这些方法,任意修改就会对继承体系造成破坏。 2 阅读全文
posted @ 2023-08-28 23:16 长名06 阅读(145) 评论(0) 推荐(0)
摘要:开闭原则 基本介绍 1.开闭原则(Open Close Principle)是编程中最基础,也最重要的原则。 2.一个软件实体如类,模块,和函数应该对扩展(增加)开放,对修改关闭。用抽象扩展结构,用实现扩展细节。 3.当软件需求变化时,尽量通过扩展软件实体的方式来实现需求,而不是通过修改已有的代码开 阅读全文
posted @ 2023-08-30 23:12 长名06 阅读(94) 评论(0) 推荐(0)
摘要:迪米特法则 基本介绍 1.一个对象应该对其他对象保持最少的了解。 2.类和类的关系越密切,耦合度越大。 3.迪米特法则(Demeter Principle)又叫最少知道原则,即一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类不管多么复杂,都尽量封装在类的内部。对外除了public的方法, 阅读全文
posted @ 2023-09-01 00:10 长名06 阅读(67) 评论(0) 推荐(0)
摘要:合成复用原则 基本介绍 尽量使用合成或聚合方式,而不是使用继承。 uml类图 此原则比较简单,无具体案例代码 设计模式核心思想 1.找出应用中可能需要变化之处,独立出来,不要将这些代码和不需要变化的代码耦合在一起。 2.针对接口编程,而不是针对实现编程。 3.为了交互对象之间的松耦合设计而努力。 设 阅读全文
posted @ 2023-09-01 21:54 长名06 阅读(66) 评论(0) 推荐(0)
摘要:单例设计模式 基本介绍 类的单例设计模式,就是采取一定的方式保证在整个的软件系统中,对某个类只能有一个对象实例存在,且类提供一个静态方法,用以获取该对象。 例如Hibernate的SessionFactory,它是sql会话工厂,这个对象一定是很重的(创建需要加载很多资源和时间),一般情况下,只需要 阅读全文
posted @ 2023-09-04 22:48 长名06 阅读(85) 评论(0) 推荐(0)
摘要:工厂设计模式 简单(静态)工厂模式 基本介绍 1.简答工厂模式,属于创建型模式,是工厂模式的一种。简单工厂模式是由一个工厂对象决定创建哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单,最实用的模式。 2.简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行为。 3.在软件开发中, 阅读全文
posted @ 2023-09-06 23:52 长名06 阅读(152) 评论(0) 推荐(0)
摘要:原型模式 案例引入 克隆羊问题 有一只羊,姓名为tom,年龄为1,颜色为白色,编写程序创建和tom羊属性完全相同的羊。 传统方式解决 代码实现 public class Sheep { private String name; private int age; private String colo 阅读全文
posted @ 2023-09-08 22:57 长名06 阅读(120) 评论(0) 推荐(0)
摘要:建造者模式 案例引入 1.建房子,过程分为打桩,砌墙,封顶。 2.房子有各种各样的,比如普通房,高楼,别墅,各种房子要求不一样,但是建造过程是一样的。 传统方式实现 代码如下 public abstract class AbstractHouse { public abstract void bui 阅读全文
posted @ 2023-09-10 23:06 长名06 阅读(115) 评论(0) 推荐(0)
摘要:适配器模式 基本介绍 1.适配器模式(Adapter Pattern)将某个类的接口(方法)转换成客户期望的另一个接口(方法)表示,主要目的是兼容性,让原本因为方法不匹配的,不能一起工作的两个类可以协同工作。别名叫包装器(Wrapper)。 2.适配器模式属于结构模式。 3.主要有三种形式,类适配器 阅读全文
posted @ 2023-09-13 00:24 长名06 阅读(213) 评论(0) 推荐(0)
摘要:桥接模式 案例引入 对不同的手机类型和不同品牌实现操作(如开机,关机,上网,打电话等)。 如手机的类型有折叠式,直立式等。手机品牌有华为,小米,vivo等。 传统方式实现案例UML图 传统方式问题分析 1.扩展性问题,如果再增加手机的样式,就需要增加各个品牌手机的类,同样我们如果增加一个手机品牌,也 阅读全文
posted @ 2023-09-14 23:56 长名06 阅读(165) 评论(0) 推荐(1)
摘要:装饰者模式 咖啡案例引入 1.咖啡种类,有意大利咖啡(Espresso),ShortBlack,美式咖啡(LongBlack),无因咖啡(Decaf)。 2.调料,Milk,Soy(豆浆),Chocolate(巧克力)。 3.要求再扩展新的咖啡种类时,具有良好的扩展性,改动方便,维护方便。 4.客户 阅读全文
posted @ 2023-09-17 00:48 长名06 阅读(143) 评论(0) 推荐(0)
摘要:组合模式 案例引入 编写程序,展示学校院系结构,要求在一个页面中展示出学院的院系组成,一个学院有几个学院,一个学院有几个系。如下图 传统方案及问题分析 传统方案 系 extends 学院 extends 学校 问题分析 1.将学院看成学校的子类,系是学院的子类,这样实际上是按照组织大小进行划分层次的 阅读全文
posted @ 2023-09-18 23:31 长名06 阅读(135) 评论(0) 推荐(0)
摘要:外观模式 案例引入 要求,组建一个家庭影院,DVD播放器,投影仪,自动屏幕,环绕立体声,爆米花机,实现家庭影院的功能。过程为,直接用遥控器,统筹各设备开关,开爆米花机,放下屏幕,开投影仪,开音响,开dvd,选dvd,取爆米花,调暗灯光,播放电影,观影结束后,关闭各设备。 传统方式实现案例 无具体代码 阅读全文
posted @ 2023-09-20 23:51 长名06 阅读(109) 评论(0) 推荐(0)
摘要:享元模式 案例引入 小型的外包项目,给客户A做一个展示网站,客户A的朋友感觉效果不错,也希望做这样的产品展示网站,但是要求都有些不同。 1.有客户要求以新闻的形式发布。 2.有客户要求以博客的形式发布。 3.有客户希望以微信公众号的形式发布。 传统方案实现案例 1.直接赋值粘贴一份,根据不同客户,进 阅读全文
posted @ 2023-09-23 00:23 长名06 阅读(93) 评论(0) 推荐(0)
摘要:代理模式 基本介绍 1.代理模式,为目标对象提供一个替身,以控制这个对象的访问。即通过代理对象访问目标对象,这样做的好处是,可以在目标对象功能的基础上,增加额外的操作,即扩展目标对象的功能。 2.目标对象(被代理对象)可以是远程对象,创建开销大的对象或者需要安全控制的对象。 3.代理模式有不同的三种 阅读全文
posted @ 2023-09-24 23:39 长名06 阅读(106) 评论(0) 推荐(0)
摘要:模板模式 案例引入 制作豆浆问题 要求: 1.制作豆浆流程 选材->添加配料->浸泡->放到豆浆机打碎。 2.通过添加不同配料,可以制作出不同口味的豆浆。 3.选材,浸泡和放到豆浆机打碎这些步骤对于制作每种口味的豆浆都是一样的。 4.请使用模板模式,完成。(因为模板方法模式,简单,就直接写了) 基本 阅读全文
posted @ 2023-09-27 00:41 长名06 阅读(105) 评论(0) 推荐(0)
摘要:命令模式 案例引入 要求 1.买了一套智能家电,有照明灯,风扇,冰箱,洗衣机,我们只要在手机上安装app就可以控制这些家电工作。 2.这些智能家电来自不同的厂家,不想针对每一种家电都安装一个app,分别控制,希望使用一个app就可以控制全部的智能家电。 3.要实现,一个app控制所有智能家电的需求, 阅读全文
posted @ 2023-09-28 23:13 长名06 阅读(131) 评论(0) 推荐(0)
摘要:访问者模式 案例引入 要求 1.将观众分为男生和女生,对歌手进行评价,当看完某个歌手表演后,对于歌手有不同的评价(评价的类别,有成功,失败等)。 传统方式实现思路 创建一个Person类,其有两个子类,分别是Man和WoMan,使用if else分支,去判断一个歌手的评价,成功对应成功分支,失败对应 阅读全文
posted @ 2023-09-30 23:00 长名06 阅读(56) 评论(0) 推荐(0)
摘要:迭代器模式 案例引入 需求 编写需求展示一个学校院系结构,需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系,且多个学院,存储系的数据机构不同,有的是集合,有的是数组。 传统解决方式 让系继承学院,学院继承学校。 传统解决方式问题分析 1.将学院看做是学校的子类,系 阅读全文
posted @ 2023-10-03 23:09 长名06 阅读(73) 评论(0) 推荐(0)
摘要:观察者模式 案例引入 要求 气象站案例要求 1.气象站,可以将每天测量到的湿度,温度,气压等气象信息以公告的形式发布出去(发布到自己的网站或者第三方平台)。 2.需要设计开发新的api,便于其他第三方也能接入气象站的数据。 3.提供温度,气压,湿度的接口。 4.策略的数据更新后,实时的通知第三方。 阅读全文
posted @ 2023-10-05 22:35 长名06 阅读(114) 评论(0) 推荐(0)
摘要:中介者模式 案例引入 要求 1.智能家庭包括设备,闹钟,咖啡机,窗帘等。 2.主人要看电视时,各个设备可以协同工作,自动完成看电视的准备工作,比如流程为,闹钟响起-> 咖啡机开始做咖啡->窗帘自动落下->电视机开始播放。 传统方式实现案例 有闹钟类(Alarm),电视类(TV),窗帘类(Curtai 阅读全文
posted @ 2023-10-07 23:39 长名06 阅读(103) 评论(0) 推荐(0)
摘要:备忘录模式 案例引入 游戏角色状态恢复问题 游戏角色有攻击力,防御力等,在大战BOSS前保存自身的状态(攻击力,防御力),当大战BOSS后攻击力和防御力下降,从备忘录对象恢复到大站前的状态。 传统方式实现案例 创建一个游戏角色类对应的状态类,给每个游戏角色对象,对应一个对应状态类的对象,用来保存状态 阅读全文
posted @ 2023-10-09 23:26 长名06 阅读(120) 评论(0) 推荐(0)
摘要:解释器模式 案例引入 四则运算问题 通过解释器模式来实现四则运算(先只考虑 + -),如计算a + b - c的值,具体要求 1.先输入表达式,比如a + b + c -d + e,要求表达式的字母不能重复。 2.再分别输入a,b,c,d,e的值。 3.最后求出结果。 传统方法实现四则运算问题及分析 阅读全文
posted @ 2023-10-12 00:08 长名06 阅读(82) 评论(0) 推荐(0)
摘要:状态模式 案例引入 APP抽奖活动 请编写抽象完成APP抽奖活动,具体要求如下: 1.假如每参加一次这个活动要扣除用户50积分,中将概率是10%。 2.奖品数量固定,抽完就不能抽了。 3.活动状态有四个,分别是,可以抽奖,不能抽奖,发送奖品,奖品已领完。 4.活动的状态转换图 基本介绍 1.状态模式 阅读全文
posted @ 2023-10-13 23:17 长名06 阅读(89) 评论(0) 推荐(0)
摘要:策略模式 案例引入 duck项目 要求: 1.有各种鸭子,比如野鸭,北京鸭,水鸭等,鸭子有各种行为,比如叫,飞行。 2.显示鸭子的信息。 传统方式实现案例 1.抽象一个父类duck,有其子类,野鸭、北京鸭、水鸭等。 代码 /** * @author 长名06 * @version 1.0 */ pu 阅读全文
posted @ 2023-10-15 23:48 长名06 阅读(150) 评论(0) 推荐(0)
摘要:职责链模式 案例引入 OA(Office Automation)系统的采购审批项目,需求是 1.采购员采购教学用品。 2.price >= 0 && price <= 5000 由教学主任审批 3.price > 5000 && price <= 10000 由原则审批 4.price > 1000 阅读全文
posted @ 2023-10-17 22:15 长名06 阅读(132) 评论(0) 推荐(0)