编程时基本都要遵守 单一职责原则 分类原则:一种人只干一种事。...缺点:一种水果就有一种新的工厂类,太多工厂类了 //水果抽象类 public abstract class Fruit { private final String name;...单例模式的三种写法: 饿汉式单例(不建议) 在最开始就创建了对象(太饥渴了,一开始就需要对象) public class Singleton { private final static...不能每一种配置都写一个类就太麻烦了,所以有了桥接模式,可以通过多个类桥接成一个产品类。...decorator.test(); //代理一次:代理前——业务方法——代理后 outer.test(); //代理两次:代理前——代理前——业务方法——代理后——代理后 } 实现代理模式除了和装饰模式一样的代码情况外还有两种实现方式
简介 设计模式主要分为三大类: 1.创建型模式: 创建型模式关注对象的创建过程 01工厂模式(Factory Method) 02抽象工厂模式 03单例模式 04建造者模式 05原型模式 2....结构型模式 结构型模式关注对象和类的组织 06适配器模式 07 桥接模式 08装饰模式 09组合模式 10外观模式 11享元模式 12代理模式。...3.行为型模式 行为型模式关注系统中对象之间的相互交互,研究系统在运行时对象之间相互通信和协作,进一步明确对象的职责 13模板方法模式 14命令模式 15迭代器模式 16观察者模式 17中介者模式...18备忘录模式 19解释器模式 20状态模式 21 策略模式 22 职责链模式 23访问者模式。
设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。...结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。...行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。...设计模式的六大原则: 总原则-开闭原则 对扩展开放,对修改封闭。在程序需要进行拓展的时候,不能去修改原有的代码,而是要扩展原有代码,实现一个热插拔的效果。
一个多月前,我写了一篇关于Linux的问题,在这个问题中,播放视频会导致处理器使用率猛增,从而显著增加热量输出,从而导致笔记本电脑中的风扇大声旋转。此行为是Li...
桥梁模式的定义 定义: 将抽象和实现解耦, 使得两者可以独立的变化 通俗的说, 就是一个类调用另一个类中的方法, 需要一个桥梁, 通过聚合的关系调用 其类图如下: ?...桥梁模式是一个很简单的模式, 它只是使用了类间的聚合关系、继承、覆写等常用功能, 但是它却提供了一个非常清晰、稳定的架构. 桥梁模式的应用 桥梁模式的优点: 抽象和实现分离....这是桥梁模式的主要特点, 它完全是为了解决继承的缺点而提出的设计模式. 在该模式下,实现可以不受抽象的约束,不用再绑定在一个固定的抽象层次上 优秀的扩充能力. 实现细节对客户透明....设计的颗粒度越细,则被重用的可能性就越大, 而采用继承则受父类的限制, 不可能出现太细的颗粒度 使用桥梁模式主要考虑如何拆分抽象和实现,并不是一设计继承就要考虑使用该模式....桥梁模式的意图还是对变化的封装, 尽量把可能变化的因素封装到最细、最小的逻辑单元中,避免风险扩散.因此在进行系统设计时,发现类的继承有N层时,可以考虑使用桥梁模式 ---- 桥梁模式在Java应用中的一个非常典型的例子就是
这样就实现了在不同状态下的切换 状态模式的应用 状态模式的优点: 结构清晰....这也是状态模式的基本要求, 状态变换放置到类的内部来实现, 外部的调用不用知道类内部如何实现状态和行为的变换 状态模式的缺点: 状态模式只有一个 缺点, 子类会太多, 也就是类膨胀....状态模式的使用场景: 行为随状态改变 而改变的场景. 条件、分支判断语句的替代者....在程序中大量使用 seitch 语句或者if 判断语句会导致程序结构不清晰, 逻辑混乱, 使用状态模式可以很好的避免这一问题, 它通过扩展子类实现了条件的判断处理 状态模式适用于当某个对象在它的状态发生改变时..., 他的行为也随着发生比较大的变化, 也就是说在行为受状态约束的情况下可以使用状态模式, 而且使用时对象的状态最好不要超过5个
概述 外观(Facade)模式又叫作门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。...外观模式是为了解决类与类之家的依赖关系的,像spring一样,可以将类和类之间的关系配置到配置文件中,而外观模式就是将他们的关系放在一个Facade类中,降低了类类之间的耦合度,该模式中没有涉及到接口,...外观模式的应用场景 通常在以下情况下可以考虑使用外观模式。 对分层结构系统构建时,使用外观模式定义子系统中每层的入口点可以简化子系统之间的依赖关系。...当一个复杂系统的子系统很多时,外观模式可以为系统设计一个简单的接口供外界访问。 当客户端与多个子系统之间存在很大的联系时,引入外观模式可将它们分离,从而提高子系统的独立性和可移植性。...模式的结构 外观(Facade)模式包含以下主要角色。 外观(Facade)角色:为多个子系统对外提供一个共同的接口。
外观模式(Facade Pattern)是一种使用频率非常高的结构型设计模式,其核心思想是为子系统中的一组接口提供一个一致的界面。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。...简而言之,外观模式就是客户端与复杂子系统之间的一个简单而统一的接口。外观模式的概念在软件系统中,由于系统的复杂性及对模块间解耦的需要,引入外观模式可以减少系统的相互依赖,提高灵活性。...外观模式的优点降低了客户端与子系统之间的耦合度:客户端只需要与外观类交互,不需要直接与子系统内部的复杂结构打交道。...外观模式的缺点不符合开闭原则:当添加新的子系统或者移除现有子系统时,可能需要修改外观类或客户端的代码。可能会导致系统过于复杂:如果过度使用外观模式,可能会增加系统中类的数量,从而增加系统的复杂度。...我们可以使用外观模式来简化与这些子系统的交互过程。
代理模式属于结构型模式,是23种设计模式中较为重要的一种,代理模式分为静态代理和动态代理,动态代理又分为基于接口实现的动态代理和基于子类实现的动态代理;在jdk源码中,很多底层的实现也是基于代理模式的,...例如创建线程的方式之一实现Runnable接口就使用了静态代理模式,而Spring框架最为重要的AOP的实现是基于动态代理模式,可见,学习代理模式是我们能看懂底层源码实现原理的一个基础。...代理模式的主要优点有: 代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用; 代理对象可以扩展目标对象的功能; 代理模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度,增加了程序的可扩展性...模式的结构 代理模式的主要角色如下。 抽象主题(Subject)类:通过接口或抽象类声明真实主题和代理对象实现的业务方法。...注意事项: 1、和适配器模式的区别:适配器模式主要改变所考虑对象的接口,而代理模式不能改变所代理类的接口。 2、和装饰器模式的区别:装饰器模式为了增强功能,而代理模式是为了加以控制。
Context封装角色: 也叫上下文角色, 起承上启下封装作用, 屏蔽高层模块对策略、算法的直接访问, 封装可能存在的变化 策略模式的重点就是封装角色, 它借用了代理模式的思路, 差别就是策略模式的封装角色和被封装的策略类不用是同一个接口...策略模式的应用 策略模式的优点: 算法可以自由切换. 只要实现抽象策略, 它就成为策略家族的一个成员, 通过封装角色对其进行封装, 保证对外提供"可自由切换"的策略 避免使用多重条件判断....我们可以使用其他模式来修正这个缺陷, 如工厂方法模式,代理模式或享元模式 策略模式的使用场景: 多个类只有在算法或行为上稍有不同的场景 算法需要自由切换的场景....4个, 则需要考虑使用混合模式, 解决策略类膨胀和对外暴露的问题, 否则日后的系统维护就会成为一个烫手山芋, 谁也不想接 ---- 策略模式是一个非常常用的模式, 但它单独使用的地方就比较少了, 因为他有致命缺陷...在实际项目中, 我们一般通过工厂方法模式来实现策略类的声明.
什么是策略模式? 它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。 什么时候去使用策略模式?...1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。 2、一个系统需要动态地在几种算法中选择一种。...3、如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。 策略模式的优点?...策略模式是一种定义一些列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方法调用所有的算法,减少了各种算法类与使用算法类之间的耦合。...策略模式和简单工厂模式的区别: 简单工厂模式:只需要发出命令,由他人去实现。 策略模式:不知要发出命令,还得由自己亲自去做。
按实际业务场景划分,工厂模式有 3 种不同的实现方式,分别是简单工厂模式、工厂方法模式和抽象工厂模式。 我们把被创建的对象称为“产品”,把创建产品的对象称为“工厂”。...简单来说,简单工厂模式有一个具体的工厂类,可以生成多个不同的产品,属于创建型设计模式。简单工厂模式不在 GoF 23 种设计模式之列。...缺点: 类的个数容易过多,增加复杂度 增加了系统的抽象性和理解难度 抽象产品只能生产一种产品,此弊端可使用抽象工厂模式解决。 应用场景 客户只知道创建产品的工厂名,而不知道具体的产品名。...模式的定义与特点 定义 是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。...抽象工厂模式是工厂方法模式的升级版本,工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品。 使用抽象工厂模式一般要满足以下条件。
概述 组合(Composite Pattern)模式的定义:有时又叫作整体-部分(Part-Whole)模式,它是一种将对象组合成树状的层次结构的模式,用来表示“整体-部分”的关系,使用户对单个对象和组合对象具有一致的访问性...由上图可以看出,其实根节点和树枝节点本质上属于同一种数据类型,可以作为容器使用;而叶子节点与树枝节点在语义上不属于用一种类型。...但是在组合模式中,会把树枝节点和叶子节点看作属于同一种数据类型(用统一接口定义),让它们具备一致行为。...这样,在组合模式中,整个树形结构中的对象都属于同一种类型,带来的好处就是用户不需要辨别是树枝节点还是叶子节点,可以直接进行操作,给用户的使用带来极大的便利。...安全方式 在该方式中,将管理子构件的方法移到树枝构件中,抽象构件和树叶构件没有对子对象的管理方法,这样就避免了上一种方式的安全性问题。
代理模式(Proxy) 代理模式的基本介绍 1.代理模式:为一个对象提供一个替身,以控制对这个对象的访问,即通过代理对象访问目标对象…这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能...2.被代理对象可以使远程对象、创建开销大的对象或需要安全控制的对象 3.代理模式有不同的形式,主要有三种静态代理、动态代理(JDK代理、接口代理)、和cglib代理(可以在内存中动态的创建对象,而不需要实现接口
策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。...策略模式的优缺点 策略模式的主要优点 多重条件语句不易维护,而使用策略模式可以避免使用多重条件语句,如 if...else 语句、switch...case 语句。...策略模式造成很多的策略类,增加维护难度。 策略模式的应用场景 策略模式在很多地方用到,如JavaSE 中的容器布局管理就是一个典型的实例,Java SE 中的每个容器都存在多种布局供用户选择。...在程序设计中,通常在以下几种情况中使用策略模式较多。 一个系统需要动态地在几种算法中选择一种时,可将每个算法封装到策略类中。...使用场景 1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。 2、一个系统需要动态地在几种算法中选择一种。
组合模式的应用 组合模式的优点: 高层模块调用简单...., 与依赖倒置原则冲突, 限制了接口的影响范围 组合模式的使用场景: 维护和展示部分-整体关系的场景, 如树形菜单、文件和文件夹管理 从一个整体中能够独立出部分模块或功能的场景 只要是树形结构, 就要考虑使用组合模式..., 只要是要体现局部和整体的关系的时候,而且这种关系还可能比较深, 应该考虑组合模式 组合模式的扩展 1.真实的组合模式 在上边的例子中, Clien 中进行了树的组装, 而在实际项目中, 数据通常在数据库中..., 我们直接从数据库将数据读取放到树上就可以了 2.透明的组合模式 组合模式有两种实现: 透明模式和安全模式....上面的实现就是安全模式, 透明模式的类图如下: ?
一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。...结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。...在以上的三种模式中,第一种如果传入的字符串有误,不能正确创建对象,第三种相对于第二种,不需要实例化工厂类,所以,大多数情况下,我们会选用第三种——静态工厂方法模式。...(Singleton)是一种常用的设计模式。...B、结构模式(7种) 我们接着讨论设计模式,上篇文章我讲完了5种创建型模式,这章开始,我将讲下7种结构型模式:适配器模式、装饰模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
装饰模式的定义 定义: 动态的给一个对象添加一些额外的职责. 就增加功能来说, 装饰模式相比生成子类更为灵活. 通俗的说, 就是对一个类或方法进行包装 装饰模式的通用类图: ?...装饰模式应用 装饰模式的优点: 装饰类和被装饰类可以独立发展, 而不会相互耦合....装饰模式可以动态的扩展一个实现类的功能 装饰模式的缺点: 对于装饰模式记住一点就够了: 多层的装饰是比较复杂的....装饰模式的应用场景: 需要扩展一个类的功能, 或给一个类增加附加功能 需要动态的给一个对象增加功能, 这些功能可以再动态的撤销 需要为一批的兄弟类进行改装或加装功能, 当然首选装饰模式 ---- 装饰模式是对继承的有力补充...同时, 继承是静态的给类增加功能, 而装饰模式是动态的增加功能. 装饰模式还有一个非常好的优点: 扩展性非常好.
代理模式有三种角色 Real Subject:真实类,也就是被代理类、委托类。用来真正完成业务服务功能; Proxy:代理类。...下面详细讲解这三种动态代理机制。 1....那么这个时候,就可用通过动态代理的方式来建立一个中间人给客户端使用,也方便框架进行搭建逻辑,某种程度上也是客户端代码和框架松耦合的一种表现。 3)Spring AOP 采用了动态代理模式 5....代理模式和其他模式的区别 1. 代理模式和装饰器模式的区别 我们来看看代理模式和装饰器模式的UML图 代理模式 ? 装饰器模式 ? 两种模式的相似度很高....代理模式和适配器模式的区别 适配器模式主要改变所考虑对象的接口,而代理模式不能改变所代理类的接口 来看看代理模式和适配器模式的UML图
概述 **命令模式(Command Pattern)**是一种数据驱动的设计模式,它属于行为型模式。...命令模式是对命令的封装。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。 命令模式的优缺点 优点 通过引入中间件(抽象接口)降低系统的耦合度。...采用命令模式增加与删除命令不会影响其他类,且满足“开闭原则”。 可以实现宏命令。命令模式可以与组合模式结合,将多个命令装配成一个组合命令,即宏命令。 方便实现 Undo 和 Redo 操作。...命令模式可以与后面将要介绍的备忘录模式结合,实现命令的撤销与恢复。 可以在现有命令的基础上,增加额外功能。比如日志记录,结合装饰器模式会更加灵活。 缺点 可能产生大量具体的命令类。...不过这也是设计模式的通病,抽象必然会额外增加类的数量,代码抽离肯定比代码聚合更加难理解。 命令模式的应用场景 请求调用者需要与请求接收者解耦时,命令模式可以使调用者和接收者不直接交互。
领取专属 10元无门槛券
手把手带您无忧上云