设计模式
文章平均质量分 80
设计模式初步学习
最 上 川
悟已往之不谏,知来者之可追。
展开
-
设计模式:代理模式
参考博客代理模式的使用总结23 种设计模式详解(全23种)代理模式类型:结构型代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。为什么要用代理模式?中介隔离作用:在某些情况下,一个客户类不想或者不能直接引用一个委托对象,而代理类对象可以在客户类和委托对象之间起到中介的作用,其特征是代理类和委托类实现相同的接口。开闭原则,增加功能:代理类除了是客户类和委托类的中介之外,我们还可以通过给代理类增加额外的功能来扩展委托类的.原创 2021-09-13 20:08:35 · 93 阅读 · 0 评论 -
设计模式:享元模式
参考博客秒懂设计模式之享元模式(Flyweight Pattern)深入理解享元模式享元模式类型:结构型享元模式通过共享技术实现相同或相似对象的重用,例子可参考常量池在享元模式中可以共享的相同内容称为 内部状态(Intrinsic State),而那些需要外部环境来设置的不能共享的内容称为 外部状态(Extrinsic State),其中外部状态和内部状态是相互独立的,外部状态的变化不会引起内部状态的变化。由于区分了内部状态和外部状态,因此可以通过设置不同的外部状态使得相同的对象可以具有一.原创 2021-09-13 19:11:32 · 104 阅读 · 0 评论 -
设计模式:状态模式
状态模式类型:行为型一个拥有状态的context对象,在不同的状态下,其行为会发生改变。优点封装了转换规则。枚举可能的状态,在枚举状态之前需要确定状态种类。将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为。允许状态转换逻辑与状态对象合成一体,而不是某一个巨大的条件语句块。可以让多个环境对象共享一个状态对象,从而减少系统中对象的个数。缺点状态模式的使用必然会增加系统类和对象的个数。状态模式的结构与实现都较为复杂,如果使用不当将原创 2021-09-13 16:55:37 · 56 阅读 · 0 评论 -
设计模式:访问者模式
参考23种设计模式(9):访问者模式访问者模式类型:行为类角色抽象访问者:抽象类或者接口,声明访问者可以访问哪些元素,具体到程序中就是visit方法中的参数定义哪些对象是可以被访问的。访问者:实现抽象访问者所声明的方法,它影响到访问者访问到一个类后该干什么,要做什么事情。抽象元素类:接口或者抽象类,声明接受哪一类访问者访问,程序上是通过accept方法中的参数来定义的。抽象元素一般有两类方法,一部分是本身的业务逻辑,另外就是允许接收哪类访问者来访问。元素类:实现抽象元素类所声明的acc.原创 2021-09-13 15:55:57 · 70 阅读 · 0 评论 -
设计模式:解释器模式
参考23种设计模式(14):解释器模式设计模式(二十)解释器模式解释器模式(据说用的非常少,我就没怎么研究了)类型:行为型给定一种语言,定义他的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中句子。角色抽象解释器(AbstractExpression):具体的解释任务由各个实现类完成。终结符表达式(TerminalExpression):实现与文法中的元素相关联的解释操作,通常一个解释器模式中只有一个终结表达式,但有多个实例,对应不同的终结符。非终结符表达式(Nont.原创 2021-09-13 14:35:06 · 94 阅读 · 2 评论 -
设计模式:中介者模式
参考设计模式入门——中介者模式(mediator)23种设计模式(7):中介者模式中介者模式类型:行为型这个中介者负责与对象之间联系,对象与对象之间不再进行直接的交互,也就是对对象关系进行解耦角色抽象中介者(mediator):定义一个接口用于和对象通信(SmartDevice)具体中介者(concretemediator):协调各同事对象实现协作,了解维护各个同事()抽象同事角色(colleague):规定了同事的基本类型具体同事角色(concreteColleague):每个.原创 2021-09-13 13:32:07 · 103 阅读 · 0 评论 -
设计模式:桥接模式
参考桥接模式(Bridge Pattern)-(最通俗易懂的案例)桥接模式将抽象部分与它的实现部分分离,使它们都可以独立地变化。角色Abstraction(抽象类):用于定义抽象类的接口,它一般是抽象类而不是接口,其中定义了一个 Implementor(实现类接口)类型的对象并可以维护该对象,它与 Implementor 之间具有关联关系。RefinedAbstraction(提炼抽象类):扩充由 Abstraction 定义的接口,通常情况下它不再是抽象类而是具体类,它实现了在 Abst.原创 2021-09-13 09:30:49 · 80 阅读 · 0 评论 -
设计模式:迭代器模式
迭代器模式类型:行为类提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。UML角色抽象容器:一般是一个接口,提供一个iterator()方法,例如java中的Collection接口,List接口,Set接口等。具体容器:就是抽象容器的具体实现类,比如List接口的有序列表实现ArrayList,List接口的链表实现LinkList,Set接口的哈希列表的实现HashSet等。抽象迭代器:定义遍历元素所需要的方法,一般来说会有这么三个方法:取得第一个元素的方法first原创 2021-09-12 23:40:10 · 80 阅读 · 0 评论 -
设计模式:单例模式
参考JAVA设计模式之单例模式单例模式类型:创建型确保一个类最多只有一个实例,并提供一个全局访问点单例模式有以下特点:单例类只能有一个实例。单例类必须自己创建自己的唯一实例。单例类必须给所有其他对象提供这一实例。采取的措施:通过将构造方法限定为private避免了类在外部被实例化(暂且当做没有反射机制)在同一个虚拟机范围内,Singleton的唯一实例只能通过getInstance()方法访问。饿汉型相对而言要考虑的较少,因为他的机制使他天生就是线程安全的,故放在第一个p.原创 2021-09-12 17:14:16 · 82 阅读 · 1 评论 -
设计模式:观察者模式
参考设计模式(五)观察者模式观察者模式原创 2021-09-12 14:35:26 · 83 阅读 · 0 评论 -
设计模式:三种工厂模式
参考博客:简单工厂模式、工厂模式以及抽象工厂模式(具体)秒懂设计模式之抽象工厂模式(Abstract Factory Pattern)抽象工厂模式(通俗易懂)工厂:实例化对象的时候不再使用 new Object()形式,通过一个工厂获得对象简单工厂模式可以根据用户的选择条件来实例化相关的类。可以看做一条上面有很多种不同实例对象的流水线,用户只需要输入一条命令给switch case(多条机械手),其中一条与命令相对应的机械手就会取出对应的实例对象。操作接口package 简单工厂模式.原创 2021-09-07 19:05:44 · 185 阅读 · 0 评论 -
设计模式:备忘录模式
参考设计模式 | 备忘录模式及典型应用23 种设计模式详解(全23种)备忘录模式 - 行为模式备忘录模式类型:行为型在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。它是一种对象行为型模式,其别名为Token。适用场景:保存一个对象在某一个时刻的全部状态或部分状态,这样以后需要时它能够恢复到先前的状态,实现撤销操作。防止外界对象破坏一个对象历史状态的封装性,避免将对象历史状态的实现细节暴露给外界对象。角色发起人.原创 2021-09-11 17:18:39 · 220 阅读 · 2 评论 -
设计模式:策略模式
参考23种设计模式(12):策略模式策略模式定义一组算法,将每个算法都封装起来,并且使他们之间可以互换。类型:行为类原创 2021-09-11 13:50:17 · 153 阅读 · 0 评论 -
设计模式:模板方法
参考23 种设计模式详解(全23种)模板方法类型:行为型在父类中定义一个完成该事情的总方法,每个步骤的具体实现,由子类完成。(感觉就是多态的内容)角色抽象父类(AbstractClass):实现了模板方法,定义了算法的骨架。具体类(ConcreteClass):实现抽象类中的抽象方法,即不同的对象的具体实现细节。UML包结构模板类package 模板方法模式;public abstract class Dish { public void doDish(){.原创 2021-09-11 10:29:00 · 73 阅读 · 1 评论 -
设计模式:命令模式
参考设计模式之命令模式设计模式6-命令模式(Command)解析+案例实践+总结命令模式类型:行为型将一个请求封装为一个对象,从而使你可用不同的请求对象对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。角色Receive接收者角色,处理命令Command命令角色,需要执行的请求Invoker调用者角色,接收命令,并执行命令UML包结构client效果优点更松散的耦合,将发起命令的客户端与具体处理命令的接收者完全解耦,客户端完全不知道接收者是什么样子.原创 2021-09-11 09:27:18 · 64 阅读 · 0 评论 -
设计模式:组合模式
参考组合模式组合模式类型:结构型模式将对象组合成树形结构来表示“部分-整体”的层次结构,使得客户能以一致的方式处理个别对象和组合对象。如何解决:叶子和非叶子实现统一接口,非叶子内部组合该接口。关键代码:非叶子内部组合该接口,并且含有内部属性 List,里面放 Component。角色Component抽象组件:为组合中所有对象提供一个接口,不管是叶子对象还是组合对象。Composite组合节点对象:实现了Component的所有操作,并且持有子节点对象。Leaf叶节点对象:叶节点对.原创 2021-09-10 22:12:29 · 87 阅读 · 0 评论 -
设计模式:外观模式
参考设计模式-外观模式(家庭影院你值得拥有) 23种设计模式详解(全23种)外观模式类型:结构型模式外观模式可以理解为转换一群接口,客户只要调用这一个接口而不用调用多个接口才能达到目的,也不需关心这个子系统的内部细节。就是解决多个复杂接口带来的使用困难,起到简化用户操作的作用。角色Facade外观类:提供统一的调用接口,外观类知道哪些子系统负责处理请求,从而将调用端的请求代理给相应子系统对象。System子系统:处理Facade对象指派的任务,是功能的实际提供者。Client客户端:.原创 2021-09-10 18:47:00 · 166 阅读 · 0 评论 -
设计模式:装饰者模式
装饰者模式类型:结构型动态的将新功能附加到对象上。在对象功能扩展方面,它比继承更有弹性。具体做法就是不断的包装,然后获得总价可以通过递归的形式由内向外获得所有花费之和可以参考下面这张图将LongBlack咖啡先包装进Milk类的对象内,表示加入了牛奶然后再包装进Chocalate类的对象内,表示加入了巧克力然后又包装进Chocalate类的对象内,表示再次加入了巧克力角色Component(被装饰对象的基类)定义一个对象接口,可以给这些对象动态地添加职责。ConcreteCom原创 2021-09-10 18:24:38 · 66 阅读 · 0 评论 -
设计模式:适配器模式
参考JAVA设计模式初探之适配器模式适配器模式类型:结构型将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作模式中的角色目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。需要适配的类(Adaptee):需要适配的类或适配者类。适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。两种实现方式:1. 类的适配器模式(采用继承实现)2. 对象适配器(采用对象组合方式实现)...原创 2021-09-10 16:25:17 · 138 阅读 · 0 评论 -
设计模式:责任链模式
参考行为型模式(一):责任链模式责任链模式类型:行为型为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。角色:抽象处理者(Handler)角色:定义一个处理请求的接口,包含抽象处理方法和一个后继连接。具体处理者(Concrete Handler)角色:实现抽象处理者的处理方法,判断能否处理本次请求,如果可以处理请求则处理,否则将该请求转给它的后继者。客户类(Cli.原创 2021-09-10 15:35:17 · 84 阅读 · 0 评论 -
设计模式:原型模式
23种设计模式详解(全23种)深拷贝和浅拷贝浅拷贝:将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的。深拷贝:将一个对象复制后,不论是基本数据类型还是引用类型,都是重新创建的。简单来说,就是深拷贝进行了完全彻底的拷贝,而浅拷贝不彻底。clone明显是深拷贝,clone出来的对象是是不能去影响原型对象的...原创 2021-09-09 20:43:58 · 130 阅读 · 0 评论 -
设计模式:建造者模式
建造者模式参考23 种设计模式详解(全23种)设计模式:建造者模式(Builder)简单来说,就是有一个管事的和一堆各司其职的工人,这个管事的人可以每次吩咐一个人去完成他的任务,需要完成任务A就找到工人A,需要完成任务B就找到工人B。管事的只负责找到相应的工人,工人只负责完成自己的任务。需要被建造的beanpackage 建造者模式.bean;public class Animal { private String head; private String body;原创 2021-09-09 17:46:23 · 68 阅读 · 0 评论