![](https://img-blog.csdnimg.cn/20190918140053667.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
设计模式
设计模式学习笔记
月照彩云归*
这个作者很懒,什么都没留下…
展开
-
设计模式----访问者模式(JAVA)
模式简析/** * *//** * 访问者模式 * 动机:将数据结构与数据操作分离。 * 解决的问题:稳定的数据结构和易变的操作耦合问题。 * 优点: * 1、符合单一职责原则。 * 2、优秀的扩展性。 * 3、灵活性。 * 缺点: * 1、具体元素对访问者公布细节,违反了迪米特原则。 * 2、具体元素变更比较困难。 * 3、违反了依赖倒置原则,依赖了具体类,没有依赖抽象。 * 使用场景: * 1、对象结构中对象对应的类很少改变,但经常需要在此对象结构上定义原创 2020-06-12 14:52:09 · 142 阅读 · 0 评论 -
设计模式----命令模式(JAVA)
模式简析/** * *//** * 命令模式 * 动机:将一个请求封装成一个对象,从而可以用不同的请求对客户进行参数化。 * 解决的问题: * 在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。 * 优点: * 1、降低了系统耦合度。 * 2、新的命令可以很容易添加到系统中去。 * 缺点: * 使用命令模式可能会导致某些系统有过多的具体命令类。 * 使用场景:认原创 2020-06-11 10:59:08 · 127 阅读 · 0 评论 -
设计模式----职责链模式(JAVA)
模式简析/** * *//** * 职责链模式 * 动机:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。 * 解决的问题: * 职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了。 * 优点: * 1、降低耦合度。它将请求的发送者和接收者解耦。 * 2、简化了对象。使得对象不需要知道链的结构。 *原创 2020-06-09 23:28:47 · 173 阅读 · 0 评论 -
设计模式----迭代器模式(JAVA)
模式简析/** * *//** * 迭代器模式 * 动机:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。 * 解决的问题:不同的方式来遍历整个整合对象。 * 优点: * 1、它支持以不同的方式遍历一个聚合对象。 * 2、迭代器简化了聚合类。 3、在同一个聚合上可以有多个遍历。 * 4、在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。 * 缺点: * 由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的原创 2020-06-09 21:10:51 · 111 阅读 · 0 评论 -
设计模式----组合模式(JAVA)
模式简析/** * *//** * 组合模式 * 动机:将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 * 解决的问题:它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。 * 优点: * 1、高层模块调用简单。 * 2、节点自由增加。 * 缺点: * 在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原创 2020-06-06 15:56:38 · 154 阅读 · 0 评论 -
设计模式----备忘录模式(JAVA)
模式简析/** * *//** * 备忘录模式 * 动机:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。 * 解决的问题:所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态, * 这样可以在以后将对象恢复到原先保存的状态。 * 优点: 1、给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。 * 2、实现了信息的封装,使得用户不需要关心状态的保存细节。 * 缺点:消耗资源。如果类的成员变原创 2020-06-06 12:28:11 · 130 阅读 · 0 评论 -
设计模式----模板方法模式(JAVA)
模式简介/** * *//** * 模板方法模式 * 动机:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。 * 模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 * 使用场景:1、有多个子类共有的方法,且逻辑相同。 2、重要的、复杂的方法,可以考虑作为模板方法。 * 优点: 1、封装不变部分,扩展可变部分。 2、提取公共代码,便于维护。 3、行为由父类控制,子类实现。 * 缺点:每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。原创 2020-06-05 13:22:59 · 69 阅读 · 0 评论 -
设计模式----状态模式(JAVA)
模式简介/** * *//** * 状态模式 * 动机:允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。 * 解决的问题:允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。 * 优点: * 1、封装了转换规则。 * 2、枚举可能的状态,在枚举状态之前需要确定状态种类。 * 3、将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为。 * 4、允许状态转换逻辑与状态对象合成一体,而不是原创 2020-06-05 12:09:11 · 160 阅读 · 0 评论 -
设计模式----观察者模式(JAVA)
模式简析/** * *//** * 观察者模式 * 动机: * 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 * 解决的问题: * 一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。 * 优点: * 1、观察者和被观察者是抽象耦合的。 2、建立一套触发机制 * 缺点: * 1、如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。 * 2、如果在观原创 2020-06-04 14:19:13 · 114 阅读 · 0 评论 -
设计模式----策略模式(JAVA)
简析原创 2020-06-03 20:42:23 · 99 阅读 · 0 评论 -
设计模式----装饰模式(JAVA)
模式简析/** * *//** * 装饰模式 * 概念: * 装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。 * 它是通过创建一个包装对象,也就是装饰来包裹真实的对象。 * 模式特点: * 装饰对象和真实对象有相同的接口。这样客户端对象就能以和真实对象相同的方式和装饰对象交互。 * 装饰对象包含一个真实对象的引用(reference) * 装饰对象接受所有来自客户端的请求。它把这些请求转发给真实的对象。 * 装饰对象可以在转发这些请求以前或以后增加原创 2020-05-10 00:54:25 · 92 阅读 · 0 评论 -
设计模式----桥接模式(JAVA)
模式简析/** * *//** * 桥接模式 * 模式定义: * 桥接模式即将抽象部分与它的实现部分分离开来,使他们都可以独立变化。 * 桥接模式将继承关系转化成关联关系,它降低了类与类之间的耦合度,减少了系统中类的数量,也减少了代码量。 * 主要结构: * Abstraction:抽象类。 * RefinedAbstraction:扩充抽象类。 * Implementor:实现类接口。 * ConcreteImplementor:具体实现类 * 优点: *1、分离抽原创 2020-05-08 18:18:15 · 174 阅读 · 0 评论 -
设计模式----中介者模式(JAVA)
中介者模式简析/** * *//** * 终结者模式 * 动机: * 在软件系统中经常会遇到多个对象相互关联相互引用依赖的情况。这样的话,如果遇到了需求变动将会影响到其他各个相互关联的对象变化。 * 在这种情况下,就需要一个中介对象来管理处理这些多个对象之间的管理依赖关系。解决紧耦合、抵御一动牵全身的变化。 * 定义: * 用一个中介对象来封装一系列的对象交互,中介者使各对象...原创 2020-05-06 00:12:43 · 111 阅读 · 0 评论 -
设计模式----外观模式(JAVA)
外观模式/** * *//** * 外观模式 * 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口是的这一子系统更加容易使用 * 解决的问题:降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。 * 使用场景:1、为复杂的模块或子系统提供外界访问的模块。 2、子系统相对独立。 3、预防低水平人员带来的风险。 * 优点: 1、减少系统相互依赖。...原创 2020-04-26 18:19:52 · 97 阅读 · 0 评论 -
设计模式----适配器模式(JAVA)
适配器模式/** * *//** * 适配器模式 * 将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。 * 角色分类: * Target(目标抽象类):目标抽象类定义客户所需接口,可以是一个抽象类或接口,也可以是具体类。 * Adapter(适配器类):适配器可以调用另一个接口,...原创 2020-04-26 13:47:09 · 86 阅读 · 0 评论 -
设计模式----代理模式(JAVA)
代理模式/** * *//** * 代理模式 * 代理模式又叫委托模式,是为某个对象提供一个代理对象,并且由代理对象控制对原对象的访问。 * 使用场景 * 代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后对返回结果的处理等。代理类本身并不真正实现服务,而是通过调用委托类的相关方法,来提供特定的服务。真正的业务功能还是由委托类来实现,但是可以在业务功能执行的...原创 2020-04-26 11:50:06 · 107 阅读 · 0 评论 -
设计模式----享元模式(JAVA)
享元模式/** * *//** * 享元模式:运用共享技术有效地支持大量细粒度的对象 * 使用场景 * 1、系统有大量相似对象。 2、需要缓冲池的场景。 * 解决的问题 * 在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。 * 关键点:用唯一标识码判断,如果在内存中有,则返回这个唯一标识码所...原创 2020-04-19 13:10:37 · 104 阅读 · 0 评论 -
设计模式----单例模式(JAVA)
单例模式/** * 单例模式 * 定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 * 解决的问题:一个全局使用的类频繁地创建与销毁。 * 分类: * 懒汉模式:线程不安全,延迟初始化,严格意义上不是不是单例模式 * 饿汉模式:线程安全,比较常用,但容易产生垃圾,因为一开始就初始化 * 双重线程锁模式:线程安全,延迟初始化。这种方式采用双锁机制,安全且在多线程情况下能保...原创 2020-04-17 18:53:26 · 73 阅读 · 0 评论 -
设计模式——建造者模式(Java)
建造者模式/** * *//** * 建造者模式 * 概念:将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 * 使用场景 * 隔离复杂对象的创建和使用,相同的方法,不同执行顺序,产生不同事件结果 * 多个部件都可以装配到一个对象中,但产生的运行结果不相同 * 产品类非常复杂或者产品类因为调用顺序不同而产生不同作用 * 初始化一个对象时,参数过多...原创 2020-04-10 18:37:12 · 113 阅读 · 0 评论 -
设计模式----原型模式(Java)
原型模式介绍/** * *//**原型模式 * 概念: * 用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。 * 使用场景: * 1、资源优化场景。 * 2、类初始化需要消化非常多的资源,这个资源包括数据、硬件资源等。 * 3、性能和安全要求的场景。 * 4、通过 new 产生一个对象需要非常繁琐的数据准备或访问权限,则可以使用原型模式。 * 5、一...原创 2020-04-07 21:40:26 · 89 阅读 · 0 评论 -
设计模式----抽象工厂模式(Java版)
问题引入在开发过程中更换数据库的问题基本的数据访问程序/** * 抽象工厂模式 * 定义:抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,无须指定它们具体的类。 * 应用: * 1、客户端(应用层)不依赖于产品类实例如何被创建、实现等细节 * 2、强调一系列相关的产品对象(属于同一产品族)一起使用创建对象需要大量重复的代码 * 3、提供一个产品类的库,所有的产品以同样的...原创 2020-04-04 18:49:30 · 143 阅读 · 0 评论 -
设计模式----工厂方法模式(Java)
import java.util.Scanner;/* * 工厂方法模式实现计算器 * 定义:工厂方法模式,又称工厂模式、多态工厂模式和虚拟构造器模式, * 通过定义工厂父类负责定义创建对象的公共接口,而子类则负责生成具体的对象。 * 作用:将类的实例化(具体产品的创建)延迟到工厂类的子类(具体工厂)中完成, * 即由子类来决定应该实例化(创建)哪一个类。 * 解决的问题...原创 2020-03-31 21:46:00 · 107 阅读 · 0 评论 -
JAVA反射与单元测试
Junit单元测试:* 测试分类: 1. 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值。 2. 白盒测试:需要写代码的。关注程序具体的执行流程。* Junit使用:白盒测试 * 步骤: 1. 定义一个测试类(测试用例) * 建议: * 测试类名:被测试的类名Test CalculatorTest * 包名:xxx.xxx.xx.test c...原创 2020-03-29 15:21:03 · 201 阅读 · 0 评论 -
设计模式------常见面向对象的原则
重新认识面向对象封装变化从宏观层面来看,面向对象的构建方式更能适 应软件的变化,能将变化所带来的影响减为最小。 封装变化包含两层含义:将相同的变化封装到一个接口或抽象类中将不同的变化封装到不同的接口或抽象类中,不应该有 两个不同的变化出现在同一个接口或抽象类中。封装变化,就是受保护的变化,找出预计有变化或不稳定 的点,为这些变化点创建稳定的接口。抽象约束抽象是对一组事物的...原创 2020-03-14 21:48:46 · 199 阅读 · 0 评论 -
UML类图练习
原创 2020-03-10 20:34:51 · 1055 阅读 · 0 评论 -
设计模式---UML类图
第一个UML类图原创 2020-03-03 19:01:41 · 133 阅读 · 0 评论