
设计模式
文章平均质量分 68
最全设计模式思想讲解
我觉得海星_98
海上风大,保重身体。
展开
-
设计模式七大原则(设计模式入门必学!也就是设计模式为什么这样设计的依据)
设计模式七大原则 文章目录设计模式七大原则单一职责原则接口隔离原则依赖倒转原则里氏替换原则开闭原则(最基础、最重要的设计原则)迪米特原则合成复用原则 学习设计模式的目的: 1)代码重用性 (即:相同功能的代码,不用多次编写) 2)可读性 (即:编程规范性, 便于其他程序员的阅读和理解) 3)可扩展性 (即:当需要增加新的功能时,非常的方便,称为可维护) 4)可靠性 (即:当我们增加新的功能后,对原来的功能没有影响) 5)使程序呈现高内聚,低耦合的特性 单一职责原则 对类来说的,即一个类应该只原创 2021-03-27 19:41:49 · 123 阅读 · 0 评论 -
策略模式(由浅到深学习设计模式)
策略模式 文章目录策略模式概述应用场景(何时使用)实例讲解总结 概述 策略模式(Strategy Pattern)中,定义算法族(策略组),分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户 应用场景(何时使用) 1、提供了可以替换继承关系的办法,即:分析项目中变化部分与不变部分进行组合/聚合 2、如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现 实例讲解 小型统筹项目:不同品种鸭的信息一览 1)有各种鸭子(原创 2021-05-24 15:07:39 · 82 阅读 · 0 评论 -
状态模式(由浅到深学习设计模式)
状态模式 文章目录状态模式概述应用场景(何时使用)实例讲解总结 概述 主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题。每种状态对应一种行为,状态之间可以相互转换 将容易产生问题的 if-else 语句删除了,如果把每个状态的行为都放到一个类中 应用场景(何时使用) 1、当一个事件或者对象有很多种状态,状态之间会相互转换,对不同的状态要求有不同的行为的时候, 可以考虑使用状态模式 2、条件、分支语句的代替者 实例讲解 请编写程序完成 APP 抽奖活动 具体要求原创 2021-05-24 14:59:09 · 102 阅读 · 0 评论 -
解释器模式(由浅到深学习设计模式)
解释器模式 文章目录解释器模式概述应用场景(何时使用)实例讲解总结 概述 是指给定一个语言(表达式),定义它的文法的一种表示,并定义一个解释器, 使用该解释器来解释语言中的句子(表达式) 应用场景(何时使用) 1、当有一个语言需要解释执行,可将该语言中的句子表示为一个抽象语法树,就可以考虑使用解释器模式,让程序具有良好的扩展性 2、编译器、运算表达式计算、正则表达式、机器人 实例讲解 通过解释器模式来实现四则运算, 如计算 a+b-c 的值 步骤如下: 1) 定义Exp原创 2021-05-24 10:19:05 · 94 阅读 · 0 评论 -
备忘录模式(由浅到深学习设计模式)
备忘录模式 文章目录备忘录模式概述应用场景(何时使用)实例讲解总结 概述 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态 为了节约内存,备忘录模式可以和原型模式配合使用(原型模式可以克隆对象,性能更高) 应用场景(何时使用) 1、需要保存/恢复数据的相关状态场景 2、数据库的事务管理 实例讲解 游戏角色有攻击力和防御力,在大战 Boss 前保存自身的状态(攻击力和防御力),当大战 Boss 后攻击力和防御原创 2021-05-24 10:03:42 · 124 阅读 · 0 评论 -
中介者模式(由浅到深学习设计模式)
中介者模式 文章目录中介者模式概述应用场景(何时使用)实例讲解总结 概述 用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互 应用场景(何时使用) 1、系统中对象之间存在比较复杂的引用关系,导致它们之间的依赖关系结构混乱而且难以复用该对象 2、MVC 框架,其中C(控制器)就是 M(模型)和 V(视图)的中介者。 实例讲解 智能家庭项目: 1)智能家庭包括各种设备,闹钟、咖啡机、电视机、窗帘 等 2原创 2021-04-29 16:05:41 · 296 阅读 · 1 评论 -
观察者模式(由浅到深学习设计模式)
观察者模式 文章目录观察者模式概述应用场景(何时使用)实例讲解总结 概述 当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。 应用场景(何时使用) 一个对象的改变将导致其他一个或多个对象也发生改变,而不知道具体有多少对象将发生改变,降低对象之间的耦合度。 实例讲解 天气预报项目 : 1)气象站可以将每天测量到的温度,湿度,气压等等以公告的形式发布出去(比如发布到自己的网 站或第三方)。 2)需原创 2021-04-29 15:58:05 · 87 阅读 · 0 评论 -
迭代器模式(由浅到深学习设计模式)
迭代器模式 文章目录迭代器模式概述应用场景(何时使用)实例讲解总结 概述 提供一种遍历集合元素的统一接口,用一致的方法遍历集合元素,不需要知道集合对象的底层表示,即:不暴露其内部的结构 应用场景(何时使用) 在遍历数据时,使用迭代器模式即可 实例讲解 学校院系结构: 要在一个页面中展示出学校的院系组成,一个学校有多个学院, 一个学院有多个系 步骤如下: 1) 定义College接口让其他类实现,里面包含增加和遍历 2) 定义xxxIterator类实现Iterator原创 2021-04-27 16:10:23 · 310 阅读 · 1 评论 -
访问者模式(由浅到深学习设计模式)
访问者模式 文章目录访问者模式概述应用场景(何时使用)实例讲解总结 概述 访问者模式(Visitor Pattern),封装一些作用于某种数据结构的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作 应用场景(何时使用) 1、需要对一个对象结构中的对象进行很多不同操作(这些操作彼此没有关联),同时需要避免让这些操作"污染"这些对象的类,可以选用访问者模式解决 2、如果一个系统有比较稳定的数据结构,又有经常变化的功能需求,那么访问者模式就是比较合适的 实例讲原创 2021-04-27 16:01:45 · 98 阅读 · 0 评论 -
命令模式(由浅到深学习设计模式)
命令模式 文章目录命令模式概述应用场景(何时使用)实例讲解总结 概述 在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个(行为型特点),我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计。 应用场景(何时使用) 1、界面的一个按钮都是一条命令 2、模拟 CMD(DOS 命令)订单的撤销/恢复 3、触发- 反馈机制 实例讲解 智能生活项目: 1) 我们买了一套智能家电,有照明灯、风扇、冰箱、洗衣机原创 2021-04-10 09:24:31 · 123 阅读 · 0 评论 -
模板模式(由浅到深学习设计模式)
模板模式 文章目录模板模式概述应用场景(何时使用)实例讲解钩子方法总结 概述 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构,就可以重定义该算法的某些特定步骤 应用场景(何时使用) 当要完成在某个过程,该过程要执行一系列步骤 ,这一系列的步骤大多数相同,但其个别步骤不同时,通常考虑用模板方法模式来处理 实例讲解 编写制作豆浆的程序: 1) 制作豆浆的流程 选材--->添加配料--->浸泡--->放到豆浆机打碎 2)原创 2021-04-10 09:07:50 · 159 阅读 · 0 评论 -
代理模式(由浅到深学习设计模式)
代理模式 文章目录代理模式概述应用场景(何时使用)三种代理模式(静态、动态、Cglib)1、静态代理2、动态代理3、Cglib代理 概述 为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。 应用场景(何时使用) 1、我们在工作中有时会接手很多前人的代码,里面代码逻辑让人摸不着头脑,这时就很难去下手修改代码,那么这时我们就可以通过代理对类进行增强。 2、我们在使用RPC框架的原创 2021-04-09 09:40:59 · 336 阅读 · 3 评论 -
享元模式(由浅到深学习设计模式)
享元模式 文章目录享元模式概述应用场景(何时使用)和单例模式的区别实例讲解1、普通方法2、利用享元模式改进总结 概述 常用于系统底层开发,解决系统的性能问题。像数据库连接池,里面都是创建好的连接对象,在这些连接对象中有我们需要的则直接拿来用,避免重新创建,如果没有我们需要的,则创建一个。 应用场景(何时使用) 1、系统中有大量对象,这些对象消耗大量内存,并且对象的状态大部分可以外部化时,我们就可以考虑选用享元模式 2、享元模式经典的应用场景就是池技术了,String 常量池、数据库连原创 2021-04-09 09:09:19 · 312 阅读 · 0 评论 -
外观模式(由浅到深学习设计模式)
外观模式 文章目录外观模式概述应用场景(何时使用)实例讲解1、普通方法2、利用外观模式改进总结 概述 也叫过程模式,通过定义一个一致的接口,用以屏蔽内部子系统的细节,使得调用端只需跟这个接口发生调用,而无需关心这个子系统的内部细节 应用场景(何时使用) 业务流程过多,但可以抽取成组合的部分,可以定义一个中间外观类,便于维护 实例讲解 组建一个家庭影院: DVD 播放器、投影仪、自动屏幕、环绕立体声、爆米花机,要求完成使用家庭影院的功能,其过程为: 直接用遥控器:统筹各设备开原创 2021-04-02 15:46:52 · 90 阅读 · 0 评论 -
组合模式(由浅到深学习设计模式)
组合模式 文章目录组合模式概述应用场景(何时使用)实例讲解1、普通方法2、利用组合模式改进总结 概述 组合模式(Composite Pattern),又叫部分整体模式,它创建了对象组的树形结构,将对象组合成树状结构以表示“整体-部分”的层次关系。 应用场景(何时使用) 1、在需要表示一个对象整体与部分的层次结构的时候; 2、文件目录显示,多及目录呈现等树形结构数据的操作。 实例讲解 编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个原创 2021-04-02 15:34:32 · 177 阅读 · 0 评论 -
装饰者模式(由浅到深学习设计模式)
装饰者模式 文章目录装饰者模式概述应用场景(何时使用)实例讲解1、普通方法2、利用装饰者模式改进总结 概述 动态的将新功能附加到对象上。在对象功能扩展方面,它比继承更有弹性,装饰者模式也体现了开闭原则(ocp) 应用场景(何时使用) 利用继承的方式,让被装饰者(无因咖啡、美式咖啡…)和装饰者(牛奶、巧克力…)实现多种不同的组合(两份牛奶、一份巧克力的无因咖啡),便于后期维护 实例讲解 计算不同种类咖啡的费用: 客户可以点单品咖啡,也可以单品咖啡+调料组合 1) 咖啡种类/原创 2021-04-01 09:53:29 · 142 阅读 · 0 评论 -
桥接模式(由浅到深学习设计模式)
桥接模式 文章目录桥接模式概述应用场景(何时使用)实例讲解1、普通方法2、利用桥接模式改进总结 概述 将实现和抽象放在两个不同的层次中,层次可以独立的改变(可扩展性可维护性增强) 应用场景(何时使用) 对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用。 1、JDBC 驱动程序 2、银行转账系统 转账分类: 网上转账,柜台转账,AMT 转账 转账用户类型:普通用户,银卡用户,金卡用户… 3、消息管理 消息类型:即时消息,延时消息 消息分类:手机短信原创 2021-04-01 09:36:20 · 162 阅读 · 0 评论 -
适配器模式(由浅到深学习设计模式)
适配器模式 文章目录适配器模式概述应用场景(何时使用)三种适配器(类适配器、对象适配器、接口适配器)1、类适配器2、对象适配器3、接口适配器总结 概述 将原来不兼容的接口融合在一起工作。主要是为了兼容性,让原本不匹配不能一起工作的两个类可以协调一起工作。 应用场景(何时使用) 一般来说,适配器模式可以看作一种“补偿模式”,用来补救设计上的缺陷。应用这种模式算是“无奈之举”。如果在设计初期,我们就能协调规避接口不兼容的问题,那这种模式就没有应用的机会了。 1、封装有缺陷的接口设计原创 2021-03-31 09:53:31 · 113 阅读 · 1 评论 -
建造者模式(由浅到深学习设计模式)
建造者模式 文章目录建造者模式概述应用场景(何时使用)建造者模式实例讲解1、普通方法2、利用建造者模式改进总结 概述 建造者模式 是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们, 用户不需要知道内部的具体构建细节。 应用场景(何时使用) 1、需要生成的产品对象有复杂的内部结构,这些产品对象具备共性 2、初始化一个对象时,参数过多,或者很多参数具有默认值 3、比如:建房子,不论什么房子都需要打地基、砌墙、封顶…而这些过程是不会变化的,变化的是你要盖原创 2021-03-31 09:26:17 · 139 阅读 · 2 评论 -
原型模式(由浅到深学习设计模式)
原型模式 文章目录原型模式概述应用场景(何时使用)浅拷贝和深拷贝1、浅拷贝2、深拷贝总结 概述 指的是通过克隆方式可以创建另外一个可定制的对象,无需知道创建细节。 应用场景(何时使用) 1、类初始化需要消化非常多的资源,这个资源包括数据、硬件资源等,通过原型拷贝避免这些消耗。 2、通过new一个对象需要非常繁琐的数据准备或访问权限,可以使用原型模式。 3、一个对象需要提供给其他对象访问,而且各个调用者可能需要修改其值,可以考虑使用原型模式拷贝多个对象供调用者使用,即保护性拷贝。原创 2021-03-30 10:09:03 · 118 阅读 · 4 评论 -
工厂模式(由浅到深学习设计模式)
工厂模式 文章目录工厂模式概述应用场景(何时使用)三种方式(简单工厂、工厂方法、抽象工厂)1、简单工厂2、工厂方法3、抽象工厂总结 概述 将创建对象new的动作,进行工厂模式的封装调用,达到项目层次依赖关系的解耦,也就是“变量不要直接持有具体类的引用”。 应用场景(何时使用) 对象各种需求过多时可用到工厂模式,达到依赖的解耦 1、披萨订购系统,披萨种类包含:伦敦胡椒披萨、伦敦奶酪披萨、北京胡椒披萨、北京奶酪披萨(四种披萨类型,以后还将扩展) 2、您需要一辆汽车,可以直接从工厂里面提货原创 2021-03-30 09:44:50 · 174 阅读 · 4 评论 -
单例模式(由浅到深学习设计模式)
单例模式 文章目录单例模式概述应用场景(何时使用)八种方式(饿汉x2,懒汉x3,其他x3)1、饿汉模式1)静态常量写法2)静态代码块2、懒汉模式1)正常写法2)同步方法3)同步代码块(因为和同步代码大同小异,所以只放图,均不推荐使用)3、其他1)双重检查2)静态内部类3)枚举总结 概述 1、单例模式保证了系统内存中该类只存在一个对象,节省了系统内存资源 2、当想实例化一个单例类的时候,必须要记住使用相应的获取对象的方法,而不是使用new 应用场景(何时使用) 1、需要频繁的进行创建和原创 2021-03-29 10:03:16 · 153 阅读 · 5 评论 -
设计模式类型
设计模式的三大类型 文章目录设计模式的三大类型创建型模式结构型模式行为型模式 创建型模式 对类的现实化进行了优化,使类的使用性能提高 单例模式、抽象工厂模式/工厂方法模式、原型模式、建造者模式 结构型模式 描述类和对象之间如何进行有效的组织,以形成良好的软件体系结构,主要的方式是使用继承关系来组织各个类 适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式 行为型模式 类和对象之间如何交互以及如何分配职责 模版方法模式、命令模式、访问者模式、迭代器模式原创 2021-03-29 09:16:02 · 80 阅读 · 0 评论