设计模式
文章平均质量分 79
记录在设计模式所学知识,资料来源与黑马程序员
|旧市拾荒|
三年工作经验,任职于某银行科技部门,从事后端开发与数据开发。
展开
-
设计模式(三十二)----综合应用-自定义Spring框架-自定义Spring IOC-自定义Spring IOC总结
1.1 使用到的设计模式工厂模式。这个使用工厂模式 + 配置文件的方式。单例模式。Spring IOC管理的bean对象都是单例的,此处的单例不是通过构造器进行单例的控制的,而是spring框架对每一个bean只创建了一个对象。模板方法模式。AbstractApplicationContext类中的finishBeanInitialization()方法调用了子类的getBean()方法,因为getBean()的实现和环境息息相关。迭代器模式。原创 2023-04-05 20:21:26 · 373 阅读 · 0 评论 -
设计模式(三十一)----综合应用-自定义Spring框架-自定义Spring IOC-定义解析器、IOC容器相关类
3.1 BeanDefinitionReader接口BeanDefinitionReader是用来解析配置文件并在注册表中注册bean的信息。定义了两个规范:获取注册表的功能,让外界可以通过该对象获取注册表对象。加载配置文件,并注册bean数据。/*** 用来解析配置文件的,而该接口只是定义了规范*///获取注册表对象//加载配置文件并在注册表中进行注册3.2 XmlBeanDefinitionReader类。原创 2023-04-03 19:52:11 · 398 阅读 · 0 评论 -
设计模式(三十)----综合应用-自定义Spring框架-自定义Spring IOC-定义bean、注册表相关类
1.1 PropertyValue类用于封装bean的属性,体现到上面的配置文件就是封装bean标签的子标签property标签数据。/*** @Description: 用来封装bean标签下的property标签的属性* name属性* ref属性* value属性 : 给基本数据类型及String类型数据赋的值*/return ref;1.2 MutablePropertyValues类。原创 2023-03-30 20:51:46 · 659 阅读 · 0 评论 -
设计模式(二十九)----综合应用-自定义Spring框架-Spring IOC相关接口分析
Spring中Bean的创建是典型的工厂模式,这一系列的Bean工厂,即IoC容器,为开发者管理对象之间的依赖关系提供了很多便利和基础服务,在Spring中有许多IoC容器的实现供用户选择,其相互关系如下图所示。BeanFactory有一个很重要的子接口,就是ApplicationContext接口,该接口主要来规范容器中的bean对象是非延时加载,即在创建容器对象的时候就对象bean进行初始化,并存储到一个容器中。这三个接口共同定义了Bean的集合、Bean之间的关系及Bean行为。原创 2023-03-27 19:52:06 · 684 阅读 · 0 评论 -
设计模式(二十八)----综合应用-自定义Spring框架-Spring简单回顾
Spring 就是面向Bean的编程(BOP,Bean Oriented Programming),Bean 在 Spring 中处于核心地位。Bean对于Spring的意义就像Object对于OOP的意义一样,Spring中没有Bean也就没有Spring存在的意义。Spring IoC容器通过配置文件或者注解的方式来管理bean对象之间的依赖关系。spring中bean用于对一个类进行封装。为什么Bean如此重要呢?spring 将bean对象交由一个叫IOC容器进行管理。原创 2023-03-23 20:38:35 · 352 阅读 · 0 评论 -
设计模式(二十七)----行为型模式之解释器模式
如上图,设计一个软件用来进行加减计算。我们第一想法就是使用工具类,提供对应的加法和减法的工具方法。//用于两个整数相加//用于两个整数相加//用于n个整数相加sum += i;return sum;上面的形式比较单一、有限,如果形式变化非常多,这就不符合要求,因为加法和减法运算,两个运算符与数值可以有无限种组合方式。比如 1+2+3+4+5、1+2+3-4等等。显然,现在需要一种翻译识别机器,能够解析由数字以及 + - 符号构成的合法的运算序列。原创 2023-03-21 20:23:37 · 319 阅读 · 0 评论 -
设计模式(二十六)----行为型模式之备忘录模式
备忘录模式提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步骤,当新的状态无效或者存在问题时,可以使用暂时存储起来的备忘录将状态复原,很多软件都提供了撤销(Undo)操作,如 Word、记事本、Photoshop、IDEA等软件在编辑时按 Ctrl+Z 组合键时能撤销当前操作,使文档恢复到之前的状态;还有在 浏览器 中的后退键、数据库事务管理中的回滚操作、玩游戏时的中间结果存档功能、数据库与操作系统的备份操作、棋类游戏中的悔棋功能等都属于这类。原创 2023-03-20 21:44:20 · 381 阅读 · 0 评论 -
设计模式(二十五)----行为型模式之访问者模式
封装一些作用于某种数据结构中的各元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作。原创 2023-03-19 18:31:12 · 266 阅读 · 0 评论 -
设计模式(二十四)----行为型模式之迭代器模式
提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。原创 2023-03-17 20:07:17 · 445 阅读 · 0 评论 -
设计模式(二十三)----行为型模式之中介者模式
一般来说,同事类之间的关系是比较复杂的,多个同事类之间互相关联时,他们之间的关系会呈现为复杂的网状结构,这是一种过度耦合的架构,即不利于类的复用,也不稳定。例如在下左图中,有六个同事类对象,假如对象1发生变化,那么将会有4个对象受到影响。如果对象2发生变化,那么将会有5个对象受到影响。也就是说,同事类之间直接关联的设计是不好的。如果引入中介者模式,那么同事类之间的关系将变为星型结构,从下右图中可以看到,任何一个类的变动,只会影响的类本身,以及中介者,这样就减小了系统的耦合。原创 2023-03-16 21:22:36 · 418 阅读 · 0 评论 -
设计模式(二十二)----行为型模式之观察者模式
又被称为发布-订阅(Publish/Subscribe)模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。原创 2023-03-15 20:10:09 · 294 阅读 · 0 评论 -
设计模式(二十一)----行为型模式之状态模式
【例】通过按钮来控制一个电梯的状态,一个电梯有开门状态,关门状态,停止状态,运行状态。每一种状态改变,都有可能要根据其他状态来更新处理。例如,如果电梯门现在处于运行时状态,就不能进行开门操作,而如果电梯门是停止状态,就可以执行开门操作。类图如下://电梯的4个状态//开门状态//关门状态//运行状态//停止状态//设置电梯的状态//电梯的动作@Override//执行关门动作@Override。原创 2023-03-14 21:47:03 · 196 阅读 · 0 评论 -
设计模式(二十)----行为型模式之责任链模式
在现实生活中,常常会出现这样的事例:一个请求有多个对象可以处理,但每个对象的处理条件或权限不同。例如,公司员工请假,可批假的领导有部门负责人、副总经理、总经理等,但每个领导能批准的天数不同,员工必须根据自己要请假的天数去找不同的领导签名,也就是说员工必须记住每个领导的姓名、电话和地址等信息,这增加了难度。这样的例子还有很多,如找领导出差报销、生活中的“击鼓传花”游戏等。又名职责链模式,为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;原创 2023-03-12 15:51:26 · 220 阅读 · 0 评论 -
设计模式(十九)----行为型模式之命令模式
日常生活中,我们出去吃饭都会遇到下面的场景。将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行存储、传递、调用、增加与管理。命令是相同的,而顾客服务员厨师这些对象是变化的。原创 2023-03-11 20:10:20 · 391 阅读 · 1 评论 -
设计模式(十八)----行为型模式之策略模式
先看下面的图片,我们去旅游选择出行模式有很多种,可以骑自行车、可以坐汽车、可以坐火车、可以坐飞机。作为一个程序猿,开发需要选择一款开发工具,当然可以进行代码开发的工具有很多,可以选择Idea进行开发,也可以使用eclipse进行开发,也可以使用其他的一些开发工具。该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。原创 2023-03-09 21:35:46 · 310 阅读 · 0 评论 -
设计模式(十七)----行为型模式之模板方法模式
在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关。例如,去银行办理业务一般要经过以下4个流程:取号、排队、办理具体业务、对银行工作人员进行评分等,其中取号、排队和对银行工作人员进行评分的业务对每个客户是一样的,可以在父类中实现,但是办理具体业务却因人而异,它可能是存款、取款或者转账等,可以延迟到子类中实现。原创 2023-03-08 20:44:58 · 311 阅读 · 0 评论 -
设计模式(十六)----结构型模式之代理享元模式
运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似对象的开销,从而提高系统资源的利用率。原创 2023-03-06 22:41:41 · 214 阅读 · 0 评论 -
设计模式(十五)----结构型模式之外观模式
有些人可能炒过股票,但其实大部分人都不太懂,这种没有足够了解证券知识的情况下做股票是很容易亏钱的,刚开始炒股肯定都会想,如果有个懂行的帮帮手就好,其实基金就是个好帮手,支付宝里就有许多的基金,它将投资者分散的资金集中起来,交由专业的经理人进行管理,投资于股票、债券、外汇等领域,而基金投资的收益归持有者所有,管理机构收取一定比例的托管管理费用。又名门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。原创 2023-03-04 23:28:48 · 129 阅读 · 0 评论 -
设计模式(十四)----结构型模式之组合模式
对于这个图片肯定会非常熟悉,上图我们可以看做是一个文件系统,对于这样的结构我们称之为树形结构。在树形结构中可以通过调用某个方法来遍历整个树,当我们找到某个叶子节点后,就可以对叶子节点进行相关的操作。可以将这颗树理解成一个大的容器,容器里面包含很多的成员对象,这些成员对象即可是容器对象也可以是叶子对象。但是由于容器对象和叶子对象在功能上面的区别,使得我们在使用的过程中必须要区分容器对象和叶子对象,但是这样就会给客户带来不必要的麻烦,作为客户而已,它始终希望能够一致的对待容器对象和叶子对象。原创 2023-03-02 20:07:20 · 350 阅读 · 0 评论 -
设计模式(十三)----结构型模式之桥接模式
现在有一个需求,需要创建不同的图形,并且每个图形都有可能会有不同的颜色。我们可以利用继承的方式来设计类的关系:我们可以发现有很多的类,假如我们再增加一个形状或再增加一种颜色,就需要创建更多的类。试想,在一个有多种可能会变化的维度的系统中,用继承方式会造成类爆炸,扩展起来不灵活。每次在一个维度上新增一个具体实现都要增加多个子类。为了更加灵活的设计系统,我们此时可以考虑使用桥接模式。将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。原创 2023-02-27 22:10:39 · 202 阅读 · 0 评论 -
设计模式(十二)----结构型模式之代理模式和装饰者模式的区别
获取目标对象构建的地方不同 装饰者是由外界传递进来,可以通过构造方法传递 静态代理是在代理类内部创建,以此来隐藏目标对象。目的不同 装饰者是为了增强目标对象 静态代理是为了保护和隐藏目标对象。都可以在不修改目标类的前提下增强目标方法。都要实现与目标类相同的业务接口。在两个类中都要声明目标对象。原创 2023-02-27 22:08:13 · 332 阅读 · 0 评论 -
设计模式(十一)----结构型模式之装饰者模式
我们先来看一个快餐店的例子。快餐店有炒面、炒饭这些快餐,可以额外附加鸡蛋、火腿、培根这些配菜,当然加配菜需要额外加钱,每个配菜的价钱通常不太一样,那么计算总价就会显得比较麻烦。使用继承的方式存在的问题:扩展性不好如果要再加一种配料(火腿肠),我们就会发现需要给FriedRice和FriedNoodles分别定义一个子类。如果要新增一个快餐品类(炒河粉)的话,就需要定义更多的子类。产生过多的子类指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式。原创 2023-02-25 19:54:23 · 616 阅读 · 0 评论 -
设计模式(十)----结构型模式之适配器模式
如果去欧洲国家去旅游的话,他们的插座如下图最左边,是欧洲标准。而我们使用的插头如下图最右边的。因此我们的笔记本电脑,手机在当地不能直接充电。所以就需要一个插座转换器,转换器第1面插入当地的插座,第2面供我们充电,这样使得我们的插头在当地能使用。生活中这样的例子很多,手机充电器(将220v转换为5v的电压),读卡器等,其实就是使用到了适配器模式。将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。原创 2023-02-19 22:25:46 · 420 阅读 · 0 评论 -
设计模式(九)----结构型模式之代理模式
由于某些原因需要给某对象(目标对象)提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。Java中的代理按照代理类生成时机不同又分为静态代理和动态代理。静态代理代理类在编译期就生成,而动态代理代理类则是在Java运行时动态生成。动态代理又有JDK代理和CGLib代理两种。原创 2023-02-16 21:49:02 · 294 阅读 · 0 评论 -
设计模式(八)----创建型模式之建造者模式与工厂模式区别
我们举个简单例子来说明两者的差异,如要制造一个超人,如果使用工厂方法模式,直接产生出来的就是一个力大无穷、能够飞翔、内裤外穿的超人;抽象工厂模式实现对产品家族的创建,一个产品家族是这样的一系列产品:具有不同分类维度的产品组合,采用抽象工厂模式则是不需要关心构建过程,只关心什么产品由什么工厂生产即可。如果将抽象工厂模式看成汽车配件生产工厂,生产一个产品族的产品,那么建造者模式就是一个汽车组装工厂,通过对部件的组装可以返回一辆完整的汽车。工厂方法模式注重的是整体对象的创建方式;原创 2023-02-16 21:45:58 · 317 阅读 · 0 评论 -
设计模式(七)----创建型模式之建造者模式
将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。分离了部件的构造(由Builder来负责)和装配(由Director负责)。从而可以构造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况。由于实现了构建和装配的解耦。不同的构建器,相同的装配,也可以做出不同的对象;相同的构建器,不同的装配顺序也可以做出不同的对象。也就是实现了构建算法、装配算法的解耦,实现了更好的复用。建造者模式可以将部件和其组装过程分开,一步一步创建一个复杂的对象。原创 2023-02-09 21:31:55 · 345 阅读 · 0 评论 -
设计模式(六)----创建型模式之原型模式
用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型对象相同的新对象。原创 2023-02-07 22:08:05 · 346 阅读 · 0 评论 -
设计模式(五)----创建型模式之工厂模式
需求:设计一个咖啡店点餐系统。设计一个咖啡类(Coffee),并定义其两个子类(美式咖啡【AmericanCoffee】和拿铁咖啡【LatteCoffee】);再设计一个咖啡店类(CoffeeStore),咖啡店具有点咖啡的功能。具体类的设计如下:在java中,万物皆对象,这些对象都需要创建,如果创建的时候直接new该对象,就会对该对象耦合严重,假如我们要更换对象,所有new对象的地方都需要修改一遍,这显然违背了软件设计的开闭原则。原创 2023-02-05 21:42:32 · 226 阅读 · 0 评论 -
设计模式(四)----创建型模式之单例模式(二)
方法,在反序列化时被反射调用,如果定义了这个方法,就返回这个方法的值,如果没有定义,则返回新new出来的对象。使上面定义的单例类(Singleton)可以创建多个对象,枚举方式除外。从上面源代码中可以看出Runtime类使用的是饿汉式(静态属性)方式来实现单例模式的。可以看到打印出来的两个地址是一样的,说明已经解决单例模式被破坏的问题。接下来介绍一个在jdk中源码中使用单例模式的一个类。序列化、反序列方式破坏单例模式的解决方法。Runtime类就是使用的单例设计模式。反射方式破解单例的解决方法。原创 2023-02-04 19:43:28 · 413 阅读 · 0 评论 -
设计模式(三)----创建型模式之单例模式(一)
创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是“将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。创建型模式分为:单例模式工厂方法模式抽象工厂模式原型模式建造者模式。原创 2023-02-02 19:39:44 · 187 阅读 · 0 评论 -
设计模式(二)----软件设计原则
在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,要尽量根据7条原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本。原创 2023-01-11 21:32:13 · 525 阅读 · 0 评论 -
设计模式(一)----设计模式概述及UML图解析
类图(Class diagram)是显示了模型的静态结构,特别是模型中存在的类、类的内部结构以及它们与其他类的关系等。类图不显示暂时性的信息。类图是面向对象建模的主要组成部分。原创 2023-01-11 21:26:56 · 578 阅读 · 0 评论