![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java设计模式
yanbincn
这个作者很懒,什么都没留下…
展开
-
学习笔记--Java设计模式
挺惭愧, 设计模式重复学习了很多次,但是每次学完过一段时间就记不住了。主要也是平时应用的比较少,没能融汇贯通。这是又一次学习巩固,打算写下来学习笔记,增加印象。后面在使用的时候也能方便查询目录创建型模式Java设计模式–基本概念Java设计模式–简单工厂(Simple Factory)Java设计模式–工厂方法(Factory Method)Java设计模式–抽象工厂(Abstrac...原创 2019-09-14 09:27:27 · 310 阅读 · 0 评论 -
Java设计模式--基本概念
定义设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,目的:使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。GoF:Gang of FourErich Gamma:苏黎世大学计算机科学博士,是Eclipse、JUnit 等项目主要技术负责人之一。Richard Helm:墨尔本大学计算机科学博士,原IB...原创 2019-03-26 14:21:02 · 473 阅读 · 0 评论 -
Java设计模式--设计原则
摘要面向对象设计原则为支持可维护性复用而诞生,这些原则蕴含在很多设计模式中,它们是从许多设计方案中总结出的指导性原则。六大原则:单一职责原则;里氏代换原则;依赖倒转原则;开闭原则;接口隔离原则;迪米特法则;合成复用原则 (7个?)单一职责原则(SRP)Single Responsibility Principle定义一个类只负责一个功能领域中的相应职责就一个类而言,应该有且只有一...原创 2019-03-26 14:46:25 · 426 阅读 · 0 评论 -
Java设计模式--简单工厂(Simple Factory)
概述简单工厂模式并不属于GoF 23个经典设计模式,但通常将它作为学习其他工厂模式的基础定义:定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。因为在简单工厂模式中用于创建实例的方法是静态(static)方法,因此简单工厂模式又被称为静态工厂方法(Static Factory Method)模式属于类创建型模式。学习难度:★★☆☆☆使用频率:★...原创 2019-03-26 15:42:48 · 373 阅读 · 0 评论 -
Java设计模式--工厂方法(Factory Method)
概述工厂方法模式中,我们不再提供一个统一的工厂类来创建所有的产品对象,而是针对不同的产品提供不同的工厂,系统提供一个与产品等级结构对应的工厂等级结构。定义:定义一个用于创建对象的接口,让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到其子类。工厂方法模式又简称为工厂模式(Factory Pattern),又可称作虚拟构造器模式(Virtual Constructor Patt...原创 2019-03-26 15:51:43 · 209 阅读 · 0 评论 -
Java设计模式--抽象工厂(Abstract Factory)
概述定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类。抽象工厂模式又称为Kit模式。工厂方法模式是用来创建一个产品的等级结构的,而抽象工厂模式是用来创建多个产品的等级结构;针对多个业务品种、业务分类是一种对象创建型模式。学习难度:★★★★☆使用频率:★★★★★优缺点优点缺点类图组成角色抽象工厂类角色(AbstractFactory...原创 2019-03-26 16:41:01 · 198 阅读 · 0 评论 -
Java设计模式--单例模式(Singleton)
概述定义:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。实现:私有静态成员变量,存放实例;私有构造方法,防止new实例;公共静态方法,创建或返回私有静态成员变量存放的实例懒汉模式:工厂方法时实例对象,运行时实例饿汉模式:私有静态成员变量直接赋值,编译直接实例对象单例模式是一种对象创建型模式。学习难度:★☆☆☆☆使用频率:...原创 2019-03-26 15:29:54 · 444 阅读 · 0 评论 -
Java设计模式--建造者模式(Builder)
概述建造者模式是较为复杂的创建型模式,它将客户端与包含多个组成部分(或部件)的复杂对象的创建过程分离,客户端无须知道复杂对象的内部组成部分与装配方式,只需要知道所需建造者的类型即可。它关注如何一步一步创建一个的复杂对象,不同的具体建造者定义了不同的创建过程,且具体建造者相互独立,增加新的建造者非常方便,无须修改已有代码,系统具有较好的扩展性。定义:将一个复杂对象的构建与它的表示分离,使得同...原创 2019-03-26 16:56:43 · 180 阅读 · 0 评论 -
Java设计模式--原型模式(ProtoType)
概述定义:使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式是一种对象创建型模式。实现:需要实现Cloneable接口;核心:clone()方法。通过clone()方式,返回对应的对象;clone()方法不会执行类的构造方法;ShadowCopy & DeepCopy学习难度:★★★☆☆使用频率:★★★☆☆优缺点优点使用clone 能够...原创 2019-03-28 14:05:55 · 202 阅读 · 0 评论 -
Java设计模式--代理模式(Proxy)
概述代理模式是常用的结构型设计模式之一,当无法直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,所访问的真实对象与代理对象需要实现相同的接口。根据代理模式的使用目的不同,代理模式又可以分为多种类型,例如保护代理、远程代理、虚拟代理、缓冲代理等,它们应用于不同的场合,满足用户的不同需求。定义:给某一个对象提供一个代理或占位符,并由代理对象来控...原创 2019-03-28 09:51:22 · 184 阅读 · 0 评论 -
Java设计模式--适配器模式(Adapter)
概述与电源适配器相似,在适配器模式中引入了一个被称为适配器(Adapter)的包装类,而它所包装的对象称为适配者(Adaptee),即被适配的类。适配器的实现就是把客户类的请求转化为对适配者的相应接口的调用。也就是说:当客户类调用适配器的方法时,在适配器类的内部将调用适配者类的方法,而这个过程对客户类是透明的,客户类并不直接访问适配者类。因此,适配器让那些由于接口不兼容而不能交互的类可以一...原创 2019-03-28 09:55:44 · 167 阅读 · 0 评论 -
Java设计模式--装饰模式(Decorator)
概述装饰模式可以在不改变一个对象本身功能的基础上给对象增加额外的新行为; 装饰模式是一种用于替代继承的技术,它通过一种无须定义子类的方式来给对象动态增加职责,使用对象之间的组合关系取代类之间的继承关系。在装饰模式中引入了装饰类,在装饰类中既可以调用待装饰的原有类的方法,还可以增加新的方法,以扩充原有类的功能。定义:动态地给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式比生成子类实...原创 2019-03-28 11:25:06 · 177 阅读 · 0 评论 -
Java设计模式--桥接模式(Bridge)
概述桥接模式是一种很实用的结构型设计模式,如果软件系统中某个类存在两个独立变化的维度,通过该模式可以将这两个维度分离出来,使两者可以独立扩展,让系统更加符合“单一职责原则”。与多层继承方案不同,它将两个独立变化的维度设计为两个独立的继承等级结构,并且在抽象层建立一个抽象关联,该关联关系类似一条连接两个独立继承结构的桥,故名桥接模式。桥接模式用一种巧妙的方式处理多层继承存在的问题,用抽象关联...原创 2019-03-28 14:04:29 · 287 阅读 · 0 评论 -
Java设计模式--享元模式(Flyweight)
概述定义:运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。采用一个共享类来避免大量拥有相同内容的“小类”的开销。内部状态:在享元对象内部不随外界环境改变而改变的部分,是可以共享的。外部状态:随着环境的改变而改变,不能够共享的状态就是外部状态。由于享元模式要求能够共享的对象必须是细粒度对象,因此它又称为轻量级模...原创 2019-03-28 14:13:28 · 260 阅读 · 0 评论 -
Java设计模式--门面模式(Facade)
概述门面模式中,一个子系统的外部与其内部的通信通过一个统一的外观类进行,Facade类将客户类与子系统的内部复杂性分隔开,使得客户类只需要与门面角色打交道,而不需要与子系统内部的很多对象打交道。门面模式是迪米特法则的一种具体实现,通过引入一个新的门面角色可以降低原有系统的复杂度,同时降低客户类与子系统的耦合度。定义:为子系统中的一组接口提供一个统一的入口。门面模式定义了一个高层接口,这个...原创 2019-03-28 11:36:55 · 277 阅读 · 0 评论 -
Java设计模式--组合模式(Composite)
概述定义:将对象以树形结构组织起来,以达成“部分-整体”的层次结构, 使得客户端对单个对象和组合对象的使用具有一致性。组合模式又可以称为“整体—部分”(Part-Whole)模式。处理树形结构,枝干节点类,聚合所有节点。提供递归遍历。是一种对象结构型模式。学习难度:★★★☆☆使用频率:★★★★☆优缺点优点缺点类图组成角色抽象构件角色(Component)...原创 2019-03-28 14:19:58 · 321 阅读 · 0 评论 -
Java设计模式--观察者模式(Observer)
概述观察者模式是使用频率最高的设计模式之一,它用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应作出反应。在观察者模式中,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多个观察者,而且这些观察者之间可以没有任何相互联系,可以根据需要增加和删除观察者,使得系统更易于扩展。定义:定义对象之间的一种一对多依赖关系,使得每当一个对...原创 2019-03-29 10:12:45 · 182 阅读 · 0 评论 -
Java设计模式--职责链模式(Chain of Responsibility)
概述职责链模式可以将请求的处理者组织成一条链,并让请求沿着链传递,由链上的处理者对请求进行相应的处理,客户端无须关心请求的处理细节以及请求的传递,只需将请求发送到链上即可,实现请求发送者和请求处理者解耦。定义:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。职责链模式是一种对象行为型模式。实现:定义...原创 2019-04-15 19:53:45 · 701 阅读 · 0 评论 -
Java设计模式--策略模式(Strategy)
概述在策略模式中,我们可以定义一些独立的类来封装不同的算法,每一个类封装一种具体的算法,在这里,每一个封装算法的类我们都可以称之为一种策略(Strategy),为了保证这些策略在使用时具有一致性,一般会提供一个抽象的策略类来做规则的定义,而每种算法则对应于一个具体策略类。策略模式的主要目的是将算法的定义与使用分开,也就是将算法的行为和环境分开,将算法的定义放在专门的策略类中,每一个策略类封...原创 2019-03-28 21:25:44 · 197 阅读 · 0 评论 -
Java设计模式--模板方法模式(Template Method)
概述在模板方法模式中,可以将相同的代码放在父类中,例如将模板方法“请客”以及基本方法“点单”和“买单”的实现放在父类中,而对于基本方法“吃东西”,在父类中只做一个声明,将其具体实现放在不同的子类中,在一个子类中提供“吃面条”的实现,而另一个子类提供“吃满汉全席”的实现。通过使用模板方法模式,一方面提高了代码的复用性,另一方面还可以利用面向对象的多态性,在运行时选择一种具体子类,实现完整的“...原创 2019-04-15 19:43:36 · 433 阅读 · 0 评论 -
Java设计模式--访问者模式(Visitor)
概述访问者模式是一种较为复杂的行为型设计模式,它包含访问者和被访问元素两个主要组成部分,这些被访问的元素通常具有不同的类型,且不同的访问者可以对它们进行不同的访问操作。例如处方单中的各种药品信息就是被访问的元素,而划价人员和药房工作人员就是访问者。访问者模式使得用户可以在不修改现有系统的情况下扩展系统的功能,为这些不同类型的元素增加新的操作。在使用访问者模式时,被访问元素通常不是单独存在的...原创 2019-03-29 09:21:10 · 306 阅读 · 0 评论 -
Java设计模式--状态模式(State)
概述状态模式用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题。当系统中某个对象存在多个状态,这些状态之间可以进行转换,而且对象在不同状态下行为不相同时可以使用状态模式。状态模式将一个对象的状态从该对象中分离出来,封装到专门的状态类中,使得对象状态可以灵活变化,对于客户端而言,无须关心对象状态的转换以及对象所处的当前状态,无论对于何种状态的对象,客户端都可以一致处理。别名为状态...原创 2019-04-15 20:16:35 · 1682 阅读 · 0 评论 -
Java设计模式--中介者模式(Mediator)
概述如果在一个系统中对象之间的联系呈现为网状结构。对象之间存在大量的多对多联系,将导致系统非常复杂,这些对象既会影响别的对象,也会被别的对象所影响,这些对象称为同事对象。中介者模式可以使对象之间的关系数量急剧减少,通过引入中介者对象,可以将系统的网状结构变成以中介者为中心的星形结构。在这个星形结构中,同事对象不再直接与另一个对象联系,它通过中介者对象与另一个对象发生相互作用。中介者对象的存...原创 2019-04-15 20:12:29 · 201 阅读 · 0 评论 -
Java设计模式--备忘录模式(Memento)
概述备忘录模式提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步骤,当新的状态无效或者存在问题时,可以使用暂时存储起来的备忘录将状态复原,当前很多软件都提供了撤销(Undo)操作,其中就使用了备忘录模式。定义:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。又称为标记(Token)模式是一种对象行为型...原创 2019-03-28 14:54:22 · 271 阅读 · 0 评论 -
Java设计模式--命令模式(Command)
概述命令模式可以将请求发送者和接收者完全解耦,发送者与接收者之间没有直接引用关系,发送请求的对象只需要知道如何发送请求,而不必知道如何完成请求。定义:将一个请求封装为一个对象,从而让我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。也叫为动作(Action)模式或事务(Transaction)模式。命令模式是一种对象行为型模式。学习难度:★★★☆☆...原创 2019-04-15 19:17:53 · 393 阅读 · 0 评论 -
Java设计模式--迭代器模式(Iterator)
概述在软件开发中,我们经常需要使用聚合对象来存储一系列数据。聚合对象拥有两个职责:一是存储数据;二是遍历数据。从依赖性来看,前者是聚合对象的基本职责;而后者既是可变化的,又是可分离的。因此,可以将遍历数据的行为从聚合对象中分离出来,封装在一个被称之为“迭代器”的对象中,由迭代器来提供遍历聚合对象内部数据的行为,这将简化聚合对象的设计,更符合“单一职责原则”的要求。定义:提供一种方法访问一个...原创 2019-03-29 09:16:15 · 363 阅读 · 0 评论 -
Java设计模式--解释器模式(Interpreter)
概述定义:定义一个语言的文法,并且建立一个解释器来解释该语言中的句子,这里的“语言”是指使用规定格式和语法的代码。解释器模式是一种类行为型模式。学习难度:★★★★★使用频率:★☆☆☆☆优缺点优点提供了一个简单的方式来执行语法,而且容易修改或者扩展语法。缺点对于复杂文法难以维护。类图组成角色抽象解析器角色(AbstractExpression)...原创 2019-04-08 09:44:42 · 264 阅读 · 0 评论