![](https://img-blog.csdnimg.cn/c15d4cd70c1941be857afda3e1788b40.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
设计模式
文章平均质量分 90
设计模式
小鲁蛋儿
莫道桑榆晚,为霞尚满天。
展开
-
尚硅谷设计模式学习(三)单例模式
所谓类的单例设计模式,就是, 并且该类只提供一个取得其对象实例的方法(静态方法)。比如 Hibernate 的 SessionFactory,它充当数据存储源的代理,并负责创建 Session 对象。SessionFactory 并不是 轻量级的,一般情况下,一个项目通常只需要一个 SessionFactory 就够,这时就会使用到单例模式。单例模式有八种方式:饿汉式(静态常量)饿汉式(静态代码块)双重检查静态内部类枚举构造器私有化类的内部创建对象。原创 2022-09-13 12:02:31 · 241 阅读 · 0 评论 -
尚硅谷设计模式学习(二十五)设计模式总结
单例模式,它的定义就是确保某一个类只有一个实例,并且提供一个全局访问点。单例模式具备典型的3个特点:1、只有一个实例。2、自我实例化。3、提供全局访问点。只需要一个实例对象或者系统中只允许一个公共访问点,除了这个公共访问点外,不能通过其他访问点访问该实例时,可以使用单例模式。单例模式的主要优点就是节约系统资源、提高了系统效率,同时也能够严格控制客户对它的访问。也许就是因为系统中只有一个实例,这样就导致了单例类的职责过重,违背了“单一职责原则”,同时也没有抽象类,所以扩展起来有一定的困难。原创 2022-09-23 21:05:38 · 739 阅读 · 0 评论 -
尚硅谷设计模式学习(二十四)职责链模式
职责链模式(Chain of Responsibility Pattern),又叫责任链模式,为请求创建了一个接收者对象的链。这种模式对请求的发送者和接收者进行解耦。职责链模式通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。属于行为型模式Handler:抽象的处理者,定义了一个处理请求的接口。原创 2022-09-22 23:44:41 · 251 阅读 · 0 评论 -
尚硅谷设计模式学习(二十三)策略模式
由鸭子项目引出策略模式有各种鸭子(比如野鸭、北京鸭、水鸭等),鸭子有各种行为,比如(叫、飞行等),显示鸭子的信息鸭子抽象类玩具鸭水鸭子野鸭1、由于不同种类的鸭子可能行为方式不同,底部实现就要更改。2、对类的局部改动,尤其超类的局部改动,会影响其他部分,会有溢出效应。原创 2022-09-22 18:43:37 · 380 阅读 · 1 评论 -
尚硅谷设计模式学习(二十二)状态模式
状态模式(State Pattern):它主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题。状态和行为是一一对应的,状态之间可以相互转换。当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类Context:环境角色,用于维护 State 实例,这个实例定义当前状态State:是抽象状态角色,封装与 Context 的一个特点接口相关行为ConcreteState:具体的状态角色,每个子类实现一个与 Context 的一个状态相关行为。原创 2022-09-21 22:11:28 · 715 阅读 · 0 评论 -
尚硅谷设计模式学习(二十一)解释器模式
在编译原理中,一个算术表达式通过词法分析器形成词法单元,而后这些词法单元再通过语法分析器构建语法分析树,最终形成一颗抽象的语法分析树。这里的词法分析器和语法分析器都可以看做是解释器。是指给定一个语言(表达式),定义它的文法的一种表示,并定义一个解释器,使用该解释器来解释语言中的句子(表达式)原创 2022-09-21 12:19:00 · 179 阅读 · 0 评论 -
尚硅谷设计模式(二十)备忘录模式
备忘录模式(Memento Pattern)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。可以这里理解备忘录模式:现实生活中的备忘录是用来记录某些要去做的事情,或者是记录已经达成的共同意见的事情,以防忘记了。而在软件层面,备忘录模式有着相同的含义,备忘录对象主要用来记录一个对象的某种状态,或者某些数据,当要做回退时,可以从备忘录对象里获取原来的数据进行恢复操作属于行为型模式Originator:需要保存状态的对象。原创 2022-09-20 15:36:07 · 726 阅读 · 0 评论 -
尚硅谷设计模式(十九)中介者模式
中介者模式(Mediator Pattern),用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。属于行为型模式比如 MVC 模式,C(Controller 控制器)是 M(Model 模型)和 V(View 视图)的中介者,在前后端交互时起到了中间人的作用。Mediator:抽象中介者,定义了同事对象到中介者对象的接口Colleague:抽象同事类。原创 2022-09-20 14:30:06 · 288 阅读 · 0 评论 -
尚硅谷设计模式学习(十八)观察者模式
观察者模式:对象之间多对一依赖的一种设计方案,被依赖的对象为 Subject,依赖的对象为 Observer,Subject 通知 Observer 变化,比如这里的气象数据是 Subject, 网站是Observer。Subject:登记注册、移除和通知Observer:接收输入。原创 2022-09-19 22:11:17 · 376 阅读 · 0 评论 -
尚硅谷设计模式(十九)迭代器模式
如果我们的集合元素是用不同的方式实现的,有数组,还有 java 的集合类,或者还有其他方式,当客户端要遍历这些集合元素的时候就要使用多种遍历方式,而且还会暴露元素的内部结构,可以考虑使用迭代器模式解决。迭代器模式,提供一种遍历集合元素的统一接口,用一致的方法遍历集合元素,不需要知道集合对象的底层表示,即:不暴露其内部的结构。属于行为型模式。Iterator接口E next();}}}Iterator:迭代器接口,系统提供。原创 2022-09-19 19:30:33 · 250 阅读 · 0 评论 -
尚硅谷设计模式学习(十六)访问者模式
最复杂的设计模式,并且使用频率不高,《设计模式》的作者评价为:大多情况下,你不需要使用访问者模式,但是一旦需要使用它时,那就真的需要使用了。访问者模式是一种将数据操作和数据结构分离的设计模式。原创 2022-09-19 12:29:09 · 277 阅读 · 0 评论 -
尚硅谷设计模式(十五)命令模式
命令模式(Command Pattern):在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可。此时,可以使用命令模式来进行设计。命令模式使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活,实现解耦。在命令模式中,会将一个请求封装为一个对象,以便使用不同参数来表示不同的请求(即命名),同时命令模式也支持可撤销的操作。通俗易懂的理解:将军发布命令,士兵去执行。原创 2022-09-18 21:45:41 · 291 阅读 · 0 评论 -
尚硅谷设计模式学习(十四)模板方法模式
在一个抽象类公开定义了执行它的方法的模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。简单说,模板方法模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构,就可以重定义该算法的某些特定步骤。这种类型的设计模式属于行为型模式。原创 2022-09-18 17:32:43 · 341 阅读 · 0 评论 -
尚硅谷设计模式学习(十三)代理模式
1)代理对象不需要实现接口,但是目标对象要实现接口,否则不能用动态代理2)代理对象的生成,是利用 JDK 的 API,动态的在内存中构建代理对象3)动态代理也叫做:JDK 代理、接口代理静态代理和 JDK 代理模式都要求目标对象是实现一个接口,但是有时候目标对象只是一个单独的对象,并没有实现任何的接口,这个时候可使用目标对象子类来实现代理,这就是Cglib 代理Cglib 代理也叫作子类代理,它是在内存中构建一个子类对象从而实现对目标对象功能扩展,有些书也将 Cglib 代理归属到动态代理。原创 2022-09-18 11:51:22 · 317 阅读 · 0 评论 -
尚硅谷设计模式学习(十二)享元模式
1)享元模式(Flyweight Pattern)也叫蝇量模式:运用共享技术有效地支持大量细粒度的对象2)常用于系统底层开发,解决系统的性能问题。像数据库连接池,里面都是创建好的连接对象,在这些连接对象中有我们需要的则直接拿来用,避免重新创建,如果没有我们需要的,则创建一个。3)享元模式能够解决重复对象的内存浪费的问题,当系统中有大量相似对象,需要缓冲池时。不需总是创建新对象,可以从缓冲池里拿。这样可以降低系统内存,同时提高效率4)原创 2022-09-17 23:05:58 · 204 阅读 · 0 评论 -
尚硅谷设计模式学习(十一)外观模式
外观模式通过定义一个一致的接口,用以屏蔽内部子系统的细节,使得调用端只需跟这个接口发生调用,而无需关心这个子系统的内部细节。原创 2022-09-17 18:33:29 · 320 阅读 · 0 评论 -
尚硅谷设计模式学习(十)组合模式
组合模式,又称为部分与整体模式,将对象组合成树状结构以表示“整体-部分”的层次关系。组合模式依据树形结构来组合对象,用来表示部分以及整体层次,属于结构型模式组合模式使得用户对单个对象和组合对象的访问具有一致性,(即组合能让客户端以一致的方式处理个别对象以及组合对象)Component:这是组合中对象声明接口,在适当情况下,实现所有类共有的接口默认行为,用于访问和管理 Component 子部件,Component可以是抽象类或者接口Leaf:在组合中表示叶子节点,叶子节点没有子节点。原创 2022-09-17 17:06:23 · 386 阅读 · 0 评论 -
尚硅谷设计模式学习(九)装饰者模式
动态的将新功能附加到对象上在对象功能扩展方面,它比继承更有弹性,装饰者模式也体现了开闭原则(ocp)。原创 2022-09-17 11:16:18 · 309 阅读 · 0 评论 -
尚硅谷设计模式学习(八)桥接模式
将实现与抽象放在两个不同的层次中,使两个层次可以独立改变。桥接模式基于类的最小设计原则,通过使用封装、聚合、继承等行为让不同的类承担不同的职责。它的主要特点是把抽象与行为实现分离开,从而可以保持各部分的独立性以及功能扩展。Abstraction为抽象化角色,定义出该角色的行为,同时保存一个对实现化角色的引用;Implementor是实现化角色,它是接口或者抽象类,定义角色必需的行为和属性;RefinedAbstraction为修正抽象化角色,引用实现化角色对抽象化角色进行修正;原创 2022-09-16 22:28:48 · 478 阅读 · 0 评论 -
尚硅谷设计模式学习(七)适配器模式
1)适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper)2)适配器模式属于结构型模式类适配器模式、对象适配器模式、接口适配器模式适配器类,通过继承被适配者类,实现适配接口,完成被适配者-> 目标的适配。1)一些书籍称为:适配器模式(Default Adapter Pattern)或缺省适配器模式。2)核心思路:当。原创 2022-09-16 12:17:08 · 287 阅读 · 0 评论 -
尚硅谷设计模式学习(六)建造者模式
通俗的讲,比如你想盖一个房子,需要修地基,砌墙,封顶,它们的地基深度,砌墙高度,封顶宽带不一样,最终的房子天差地别。而这样的根据相同的过程,不同的组装所产生出的具体的内容,就是建造者模式的具体实现,也就是将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。原创 2022-09-15 23:05:13 · 176 阅读 · 0 评论 -
尚硅谷设计模式(五)原型模式
用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象2)原型模式是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象,无需知道如何创建的细节3)工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建,即对象.clone()原创 2022-09-14 16:49:38 · 260 阅读 · 0 评论 -
尚硅谷设计模式学习(四)工厂模式
1)简单工厂模式是属于创建型模式,是工厂模式的一种。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式定义了一个创建对象的类,由这个类来封装实例化对象的行为(代码)3)在软件开发中,当我们会用到大量的创建某种、某类或者某批对象时,就会使用到工厂模式1)工厂方法模式设计方案:将披萨项目的实例化功能抽象成抽象方法,在不同的口味点餐子类中具体实现。定义一个创建对象的抽象方法,由子类决定要实例化的类。工厂方法模式将对象的实例化推迟到子类。原创 2022-09-13 20:42:38 · 415 阅读 · 0 评论 -
尚硅谷设计模式学习(二)UML类图
startumlclass01 "依赖"..> class02class03 "泛化(继承)"--|> class04class05 "实现" ..|> class06class07 "单向一对一"--> class08class09 "双向一对一" -- class10class11 "聚合" --o class12class13 "组合" --* class14@enduml。原创 2022-09-13 10:40:54 · 257 阅读 · 0 评论 -
尚硅谷设计模式学习(一)设计模式七大原则
1)里氏替换原则(Liskov Substitution Principle)在 1988 年,由麻省理工学院的以为姓里的女士提出的。2)如果对每个类型为 T1 的对象 o1,都有类型为 T2 的对象 o2,使得以 T1 定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子类型。换句话说,所有引用基类的地方必须能透明地使用其子类的对象。3)在使用继承时,遵循里氏替换原则,在子类中尽量不要重写父类的方法。原创 2022-09-13 08:58:29 · 630 阅读 · 0 评论