设计模式
文章平均质量分 90
设计模式学习
Luo_xguan
好好学习,天天向上。
展开
-
设计模式—32种设计模式目录
创建模式这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。序号内容地址1工厂模式(Factory Pattern)https://blog.csdn.net/qq_40493944/article/details/1210694542单例模式(Singleton Pattern)https://blog.csdn.net/qq_40493944/artic原创 2021-11-15 00:04:44 · 266 阅读 · 0 评论 -
设计模式—解释器模式
目录1.概述2.结构3.案例4.优缺点5.使用场景1.概述如上图,设计一个软件用来进行加减计算。我们第一想法就是使用工具类,提供对应的加法和减法的工具方法。//用于两个整数相加public static int add(int a,int b){ return a + b;}//用于两个整数相加public static int add(int a,int b,int c){ return a + b + c;}//用于n个整数相加public static i原创 2021-11-15 00:05:41 · 144 阅读 · 0 评论 -
设计模式—备忘录模式
目录1.概述2.结构3.案例实现3.1 "白箱"备忘录模式3.2 "黑箱"备忘录模式4.优缺点5.使用场景1.概述备忘录模式提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步骤,当新的状态无效或者存在问题时,可以使用暂时存储起来的备忘录将状态复原,很多软件都提供了撤销(Undo)操作,如 Word、记事本、Photoshop、IDEA等软件在编辑时按 Ctrl+Z 组合键时能撤销当前操作,使文档恢复到之前的状态;还有在 浏览器 中的后退键、数据库事务管理中的回滚操作、玩游戏时的中间结原创 2021-11-15 00:05:21 · 335 阅读 · 0 评论 -
设计模式—访问者模式
目录1.概述2.结构3.案例4.优缺点5.使用场景6.扩展1.概述定义:封装一些作用于某种数据结构中的各元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作。2.结构访问者模式包含以下主要角色:抽象访问者(Visitor)角色:定义了对每一个元素(Element)访问的行为,它的参数就是可以访问的元素,它的方法个数理论上来讲与元素类个数(Element的实现类个数)是一样的,从这点不难看出,访问者模式要求元素类的个数不能改变。具体访问者(ConcreteV原创 2021-11-14 23:12:51 · 1098 阅读 · 0 评论 -
设计模式—迭代器模式
目录1.概述2.结构3.案例4.优缺点5.使用场景JDK源码解析1.概述定义:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。2.结构迭代器模式主要包含以下角色:抽象聚合(Aggregate)角色:定义存储、添加、删除聚合元素以及创建迭代器对象的接口。具体聚合(ConcreteAggregate)角色:实现抽象聚合类,返回一个具体迭代器的实例。抽象迭代器(Iterator)角色:定义访问和遍历聚合元素的接口,通常包含 hasNext()、ne原创 2021-11-14 22:58:11 · 198 阅读 · 0 评论 -
设计模式—中介者模式
目录1.概述2.结构3.案例4.优缺点5.使用场景1.概述一般来说,同事类之间的关系是比较复杂的,多个同事类之间互相关联时,他们之间的关系会呈现为复杂的网状结构,这是一种过度耦合的架构,即不利于类的复用,也不稳定。例如在下左图中,有六个同事类对象,假如对象1发生变化,那么将会有4个对象受到影响。如果对象2发生变化,那么将会有5个对象受到影响。也就是说,同事类之间直接关联的设计是不好的。如果引入中介者模式,那么同事类之间的关系将变为星型结构,从下右图中可以看到,任何一个类的变动,只会影响的类本身,原创 2021-11-14 22:47:21 · 386 阅读 · 0 评论 -
设计模式—观察者模式
目录1.概述2.结构3.案例4.优缺点5.使用场景1.概述定义:又被称为发布-订阅(Publish/Subscribe)模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。2.结构在观察者模式中有如下角色:Subject:抽象主题(抽象被观察者),抽象主题角色把所有观察者对象保存在一个集合里,每个主题都可以有任意数量的观察者,抽象主题提供一个接口,可以增加和删除观察者对象。Conc原创 2021-11-14 16:47:50 · 257 阅读 · 0 评论 -
设计模式—状态模式
目录1.概述2.结构3.案例4.优缺点5.使用场景1.概述例】通过按钮来控制一个电梯的状态,一个电梯有开门状态,关门状态,停止状态,运行状态。每一种状态改变,都有可能要根据其他状态来更新处理。例如,如果电梯门现在处于运行时状态,就不能进行开门操作,而如果电梯门是停止状态,就可以执行开门操作。类图如下实现代码public interface ILift { //电梯的4个状态 //开门状态 public final static int OPENING_STATE =原创 2021-11-14 16:40:44 · 278 阅读 · 0 评论 -
设计模式—责任链模式
目录1.概述2.结构3.案例4.优缺点5.源码解析1.概述在现实生活中,常常会出现这样的事例:一个请求有多个对象可以处理,但每个对象的处理条件或权限不同。例如,公司员工请假,可批假的领导有部门负责人、副总经理、总经理等,但每个领导能批准的天数不同,员工必须根据自己要请假的天数去找不同的领导签名,也就是说员工必须记住每个领导的姓名、电话和地址等信息,这增加了难度。这样的例子还有很多,如找领导出差报销、生活中的“击鼓传花”游戏等。定义:又名职责链模式,为了避免请求发送者与多个请求处理者耦合在一起,原创 2021-11-14 16:22:08 · 323 阅读 · 0 评论 -
设计模式—命令模式
目录1.概述2.结构3.案例4.优缺点5.使用场景6.JDK源码解析1.概述日常生活中,我们出去吃饭都会遇到下面的场景。定义将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行存储、传递、调用、增加与管理。2.结构命令模式包含以下主要角色:抽象命令类(Command)角色: 定义命令的接口,声明执行的方法。具体命令(Concrete Command)角色:具体的命令,实现命令接口;通常会持有接收者,原创 2021-11-14 14:48:07 · 190 阅读 · 0 评论 -
设计模式—策略模式
目录1.概述2.结构3.案例4.优缺点5.使用场景6.JDK源码解析1.概述先看下面的图片,我们去旅游选择出行模式有很多种,可以骑自行车、可以坐汽车、可以坐火车、可以坐飞机。作为一个程序猿,开发需要选择一款开发工具,当然可以进行代码开发的工具有很多,可以选择Idea进行开发,也可以使用eclipse进行开发,也可以使用其他的一些开发工具。定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进原创 2021-11-14 13:29:01 · 446 阅读 · 0 评论 -
设计模式—模板方法模式
目录1.概述2.结构3.案例实现4.优缺点5.适用场景6.JDK源码解析1.概述在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关。例如,去银行办理业务一般要经过以下4个流程:取号、排队、办理具体业务、对银行工作人员进行评分等,其中取号、排队和对银行工作人员进行评分的业务对每个客户是一样的,可以在父类中实现,但是办理具体业务却因人而异,它可能是存款、取款或者转账原创 2021-11-14 13:02:40 · 224 阅读 · 0 评论 -
设计模式—享元设计模式
目录1.概述2.结构3.案例实现4.优缺点和使用场景5.JDK源码解析1.概述定义运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似对象的开销,从而提高系统资源的利用率。通过共享的方式高效的支持大量细粒度的对象。主要解决在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。2.结构3.案例实现4.优缺点和使用场景5.JDK源码解析...原创 2021-11-14 12:33:34 · 431 阅读 · 0 评论 -
设计模式—组合模式
目录1.概述2.结构3.案例实现4.组合模式的分类5.优点6.使用场景1.概述对于这个图片肯定会非常熟悉,上图我们可以看做是一个文件系统,对于这样的结构我们称之为树形结构。在树形结构中可以通过调用某个方法来遍历整个树,当我们找到某个叶子节点后,就可以对叶子节点进行相关的操作。可以将这颗树理解成一个大的容器,容器里面包含很多的成员对象,这些成员对象即可是容器对象也可以是叶子对象。但是由于容器对象和叶子对象在功能上面的区别,使得我们在使用的过程中必须要区分容器对象和叶子对象,但是这样就会给客户带来不必要原创 2021-11-06 23:51:19 · 697 阅读 · 0 评论 -
设计模式—外观模式
目录1.概述2.结构3.案例4.使用场景5.源码解析1.概述举例有些人可能炒过股票,但其实大部分人都不太懂,这种没有足够了解证券知识的情况下做股票是很容易亏钱的,刚开始炒股肯定都会想,如果有个懂行的帮帮手就好,其实基金就是个好帮手,支付宝里就有许多的基金,它将投资者分散的资金集中起来,交由专业的经理人进行管理,投资于股票、债券、外汇等领域,而基金投资的收益归持有者所有,管理机构收取一定比例的托管管理费用。定义又名门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易原创 2021-11-06 23:19:43 · 251 阅读 · 0 评论 -
设计模式—桥接模式
目录1.概述2.结构3.案例4.使用场景1.概述现在有一个需求,需要创建不同的图形,并且每个图形都有可能会有不同的颜色。我们可以利用继承的方式来设计类的关系:我们可以发现有很多的类,假如我们再增加一个形状或再增加一种颜色,就需要创建更多的类。试想,在一个有多种可能会变化的维度的系统中,用继承方式会造成类爆炸,扩展起来不灵活。每次在一个维度上新增一个具体实现都要增加多个子类。为了更加灵活的设计系统,我们此时可以考虑使用桥接模式。定义将抽象与实现分离,使它们可以独立变化。它是用组合关系代原创 2021-11-06 22:57:49 · 286 阅读 · 0 评论 -
设计模式—装饰者设计模式
目录1.概述2.结构3.案例4.使用场景5.JDK源码解析6.代理和装饰者的区别1.概述举个例子快餐店有炒面、炒饭这些快餐,可以额外附加鸡蛋、火腿、培根这些配菜,当然加配菜需要额外加钱,每个配菜的价钱通常不太一样,那么计算总价就会显得比较麻烦。上图是使用继承的类图,使用继承的方式存在的问题:扩展性不好如果要再加一种配料(火腿肠),我们就会发现需要给FriedRice和FriedNoodles分别定义一个子类。如果要新增一个快餐品类(炒河粉)的话,就需要定义更多的子类。产生过多的子类原创 2021-11-03 23:03:02 · 297 阅读 · 0 评论 -
设计模式—适配器设计模式
适配器设计模式1.概述2.结构3.类适配器模式4.对象适配器模式5.应用场景6.JDK源码解析1.概述如下图所示,为了使得三孔的插座能够被常规的两个接线柱的插头使用,得需要使用一个交流电适配器来进行转换。又比如手机充电器能将220V得电压转换为5V适合手机充电‘、读卡器等等生活中常见得就是使用到了适配器模式。定义:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类适配器模式和对象适配器模式,前者类之间的耦合度比后者高,原创 2021-11-03 00:23:34 · 370 阅读 · 0 评论 -
设计模式—代理设计模式
代理模式原创 2021-11-02 23:33:29 · 336 阅读 · 0 评论 -
设计模式—建造者设计模式
建造者设计模式1.概述2. 结构3. 实现4.优缺点5.使用场景6.模式扩展1.概述将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。分离了部件的构造(由Builder来负责)和装配(由Director负责)。 从而可以构造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况。由于实现了构建和装配的解耦。不同的构建器,相同的装配,也可以做出不同的对象;相同的构建器,不同的装配顺序也可以做出不同的对象。也就是实现了构建算法、装配算法的解耦,实现了更好的复用。原创 2021-11-01 00:27:36 · 395 阅读 · 0 评论 -
设计模式—原型设计模式
原型设计模式1.概述2.结构3.实现4.案例5.使用场景6.扩展(深克隆)1.概述通过复制现有实例来创建新的实例,无需知道相应类的信息。用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型对象相同的新对象。简单地理解,其实就是当需要创建一个指定的对象时,我们刚好有一个这样的对象,但是又不能直接使用,我会clone一个一毛一样的新对象来使用;基本上这就是原型模式。关键字:Clone。2.结构原型模式包含如下角色:抽象原型类:规定了具体原型对象必须实现的的 clone() 方原创 2021-11-01 00:00:02 · 354 阅读 · 0 评论 -
设计模式—工厂设计模式
工厂设计模式1.概述2.简单工厂模式2.1 结构2.2 实现2.3 优缺点2.4 扩展3.工厂方法模式3.1 概述3.2 结构3.3 实现3.4 优缺点4.抽象工厂模式4.1 概述4.2 结构4.3 实现4.4 优缺点4.5 应用场景5.扩展模式5.1 第一步:定义配置文件5.2 改写工厂类6.JDK源码解析—Collection.iterator方法1.概述在java中,万物皆对象,这些对象都需要创建,如果创建的时候直接new该对象,就会对该对象耦合严重,假如我们要更换对象,所有new对象的地方都需原创 2021-10-31 22:40:39 · 1059 阅读 · 0 评论 -
设计模式—单例设计模式
单例设计模式1.概述2.结构3.实现3.1 预加载(饿汉式)3.2 预加载(饿汉式)——枚举方式3.3 懒加载(懒汉式)3.4 懒加载(懒汉式)——解决线程安全问题3.5 懒加载(懒汉式)——双重检查3.6 懒加载(懒汉式)——静态内部类4.存在的问题及解决方法4.1 问题一:序列化和反序列化能够破坏单例模式4.2 问题二:反射能够破坏单例模式5.JDK源码解析-Runtime类5.1 Runtime类部分源码5.2 Runtime类的使用1.概述定义: 确保一个类最多只有一个实例,并提供一个全局访问原创 2021-10-31 20:18:49 · 468 阅读 · 0 评论 -
设计模式的六大原则
设计模式的六大原则1、开闭原则(Open Close Principle)2、里氏代换原则(Liskov Substitution Principle)3、依赖倒转原则(Dependence Inversion Principle)4、接口隔离原则(Interface Segregation Principle)5、迪米特法则,又称最少知道原则(Demeter Principle)6、合成复用原则(Composite Reuse Principle)1、开闭原则(Open Close Principle)原创 2021-09-28 11:12:29 · 108 阅读 · 0 评论 -
设计模式1-设计模式介绍
文章目录什么是设计模式?什么是GOF?(四人帮,全拼Gang of Four)设计模式的使用设计模式的类型?图解设计模式之间的关系设计模式的六大原则总结设计模式系列笔记,学习参考w3cschool教程:https://www.w3cschool.cn/shejimoshi/design-pattern-intro.html什么是设计模式?设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决转载 2021-08-05 21:56:52 · 131 阅读 · 0 评论