首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

设计模式——23设计模式

编程时基本都要遵守 单一职责原则 分类原则:一人只干一事。...缺点:一水果就有一新的工厂类,太多工厂类了 //水果抽象类 public abstract class Fruit { private final String name;...单例模式的三写法: 饿汉式单例(不建议) 在最开始就创建了对象(太饥渴了,一开始就需要对象) public class Singleton { private final static...不能每一配置都写一个类就太麻烦了,所以有了桥接模式,可以通过多个类桥接成一个产品类。...decorator.test(); //代理一次:代理前——业务方法——代理后 outer.test(); //代理两次:代理前——代理前——业务方法——代理后——代理后 } 实现代理模式除了和装饰模式一样的代码情况外还有两实现方式

1.7K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    23设计模式

    设计模式分为三大类: 创建型模式,共五:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。...结构型模式,共七:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。...行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。...设计模式的六大原则: 总原则-开闭原则 对扩展开放,对修改封闭。在程序需要进行拓展的时候,不能去修改原有的代码,而是要扩展原有代码,实现一个热插拔的效果。

    22820

    23设计模式之代理模式

    代理模式属于结构型模式,是23设计模式中较为重要的一,代理模式分为静态代理和动态代理,动态代理又分为基于接口实现的动态代理和基于子类实现的动态代理;在jdk源码中,很多底层的实现也是基于代理模式的,...例如创建线程的方式之一实现Runnable接口就使用了静态代理模式,而Spring框架最为重要的AOP的实现是基于动态代理模式,可见,学习代理模式是我们能看懂底层源码实现原理的一个基础。...代理模式的主要优点有: 代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用; 代理对象可以扩展目标对象的功能; 代理模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度,增加了程序的可扩展性...模式的结构 代理模式的主要角色如下。 抽象主题(Subject)类:通过接口或抽象类声明真实主题和代理对象实现的业务方法。...注意事项: 1、和适配器模式的区别:适配器模式主要改变所考虑对象的接口,而代理模式不能改变所代理类的接口。 2、和装饰器模式的区别:装饰器模式为了增强功能,而代理模式是为了加以控制。

    29230

    23设计模式之——策略模式

    什么是策略模式? 它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。 什么时候去使用策略模式?...1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一行为。 2、一个系统需要动态地在几种算法中选择一。...3、如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。 策略模式的优点?...策略模式是一定义一些列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方法调用所有的算法,减少了各种算法类与使用算法类之间的耦合。...策略模式和简单工厂模式的区别: 简单工厂模式:只需要发出命令,由他人去实现。 策略模式:不知要发出命令,还得由自己亲自去做。

    35410

    23设计模式之工厂模式

    按实际业务场景划分,工厂模式有 3 不同的实现方式,分别是简单工厂模式、工厂方法模式和抽象工厂模式。 我们把被创建的对象称为“产品”,把创建产品的对象称为“工厂”。...简单来说,简单工厂模式有一个具体的工厂类,可以生成多个不同的产品,属于创建型设计模式。简单工厂模式不在 GoF 23 设计模式之列。...缺点: 类的个数容易过多,增加复杂度 增加了系统的抽象性和理解难度 抽象产品只能生产一产品,此弊端可使用抽象工厂模式解决。 应用场景 客户只知道创建产品的工厂名,而不知道具体的产品名。...模式的定义与特点 定义 是一为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。...抽象工厂模式是工厂方法模式的升级版本,工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品。 使用抽象工厂模式一般要满足以下条件。

    32010

    23设计模式之组合模式

    概述 组合(Composite Pattern)模式的定义:有时又叫作整体-部分(Part-Whole)模式,它是一将对象组合成树状的层次结构的模式,用来表示“整体-部分”的关系,使用户对单个对象和组合对象具有一致的访问性...由上图可以看出,其实根节点和树枝节点本质上属于同一数据类型,可以作为容器使用;而叶子节点与树枝节点在语义上不属于用一类型。...但是在组合模式中,会把树枝节点和叶子节点看作属于同一数据类型(用统一接口定义),让它们具备一致行为。...这样,在组合模式中,整个树形结构中的对象都属于同一类型,带来的好处就是用户不需要辨别是树枝节点还是叶子节点,可以直接进行操作,给用户的使用带来极大的便利。...安全方式 在该方式中,将管理子构件的方法移到树枝构件中,抽象构件和树叶构件没有对子对象的管理方法,这样就避免了上一方式的安全性问题。

    35620

    23设计模式之策略模式

    Context封装角色: 也叫上下文角色, 起承上启下封装作用, 屏蔽高层模块对策略、算法的直接访问, 封装可能存在的变化 策略模式的重点就是封装角色, 它借用了代理模式的思路, 差别就是策略模式的封装角色和被封装的策略类不用是同一个接口...策略模式的应用 策略模式的优点: 算法可以自由切换. 只要实现抽象策略, 它就成为策略家族的一个成员, 通过封装角色对其进行封装, 保证对外提供"可自由切换"的策略 避免使用多重条件判断....我们可以使用其他模式来修正这个缺陷, 如工厂方法模式,代理模式或享元模式 策略模式的使用场景: 多个类只有在算法或行为上稍有不同的场景 算法需要自由切换的场景....4个, 则需要考虑使用混合模式, 解决策略类膨胀和对外暴露的问题, 否则日后的系统维护就会成为一个烫手山芋, 谁也不想接 ---- 策略模式是一个非常常用的模式, 但它单独使用的地方就比较少了, 因为他有致命缺陷...在实际项目中, 我们一般通过工厂方法模式来实现策略类的声明.

    43920

    23设计模式之组合模式

    组合模式的应用 组合模式的优点: 高层模块调用简单...., 与依赖倒置原则冲突, 限制了接口的影响范围 组合模式的使用场景: 维护和展示部分-整体关系的场景, 如树形菜单、文件和文件夹管理 从一个整体中能够独立出部分模块或功能的场景 只要是树形结构, 就要考虑使用组合模式..., 只要是要体现局部和整体的关系的时候,而且这种关系还可能比较深, 应该考虑组合模式 组合模式的扩展 1.真实的组合模式 在上边的例子中, Clien 中进行了树的组装, 而在实际项目中, 数据通常在数据库中..., 我们直接从数据库将数据读取放到树上就可以了 2.透明的组合模式 组合模式有两实现: 透明模式和安全模式....上面的实现就是安全模式, 透明模式的类图如下: ?

    56920

    23设计模式之策略模式

    策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。...策略模式的优缺点 策略模式的主要优点 多重条件语句不易维护,而使用策略模式可以避免使用多重条件语句,如 if...else 语句、switch...case 语句。...策略模式造成很多的策略类,增加维护难度。 策略模式的应用场景 策略模式在很多地方用到,如JavaSE 中的容器布局管理就是一个典型的实例,Java SE 中的每个容器都存在多种布局供用户选择。...在程序设计中,通常在以下几种情况中使用策略模式较多。 一个系统需要动态地在几种算法中选择一时,可将每个算法封装到策略类中。...使用场景 1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一行为。 2、一个系统需要动态地在几种算法中选择一

    45610

    23设计模式之桥梁模式

    桥梁模式的定义 定义: 将抽象和实现解耦, 使得两者可以独立的变化 通俗的说, 就是一个类调用另一个类中的方法, 需要一个桥梁, 通过聚合的关系调用 其类图如下: ?...桥梁模式是一个很简单的模式, 它只是使用了类间的聚合关系、继承、覆写等常用功能, 但是它却提供了一个非常清晰、稳定的架构. 桥梁模式的应用 桥梁模式的优点: 抽象和实现分离....这是桥梁模式的主要特点, 它完全是为了解决继承的缺点而提出的设计模式. 在该模式下,实现可以不受抽象的约束,不用再绑定在一个固定的抽象层次上 优秀的扩充能力. 实现细节对客户透明....设计的颗粒度越细,则被重用的可能性就越大, 而采用继承则受父类的限制, 不可能出现太细的颗粒度 使用桥梁模式主要考虑如何拆分抽象和实现,并不是一设计继承就要考虑使用该模式....桥梁模式的意图还是对变化的封装, 尽量把可能变化的因素封装到最细、最小的逻辑单元中,避免风险扩散.因此在进行系统设计时,发现类的继承有N层时,可以考虑使用桥梁模式 ---- 桥梁模式在Java应用中的一个非常典型的例子就是

    40720

    23设计模式之状态模式

    这样就实现了在不同状态下的切换 状态模式的应用 状态模式的优点: 结构清晰....这也是状态模式的基本要求, 状态变换放置到类的内部来实现, 外部的调用不用知道类内部如何实现状态和行为的变换 状态模式的缺点: 状态模式只有一个 缺点, 子类会太多, 也就是类膨胀....状态模式的使用场景: 行为随状态改变 而改变的场景. 条件、分支判断语句的替代者....在程序中大量使用 seitch 语句或者if 判断语句会导致程序结构不清晰, 逻辑混乱, 使用状态模式可以很好的避免这一问题, 它通过扩展子类实现了条件的判断处理 状态模式适用于当某个对象在它的状态发生改变时..., 他的行为也随着发生比较大的变化, 也就是说在行为受状态约束的情况下可以使用状态模式, 而且使用时对象的状态最好不要超过5个

    55540

    23设计模式之外观模式

    概述 外观(Facade)模式又叫作门面模式,是一通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。...外观模式是为了解决类与类之家的依赖关系的,像spring一样,可以将类和类之间的关系配置到配置文件中,而外观模式就是将他们的关系放在一个Facade类中,降低了类类之间的耦合度,该模式中没有涉及到接口,...外观模式的应用场景 通常在以下情况下可以考虑使用外观模式。 对分层结构系统构建时,使用外观模式定义子系统中每层的入口点可以简化子系统之间的依赖关系。...当一个复杂系统的子系统很多时,外观模式可以为系统设计一个简单的接口供外界访问。 当客户端与多个子系统之间存在很大的联系时,引入外观模式可将它们分离,从而提高子系统的独立性和可移植性。...模式的结构 外观(Facade)模式包含以下主要角色。 外观(Facade)角色:为多个子系统对外提供一个共同的接口。

    32710

    23设计模式,外观模式实战

    外观模式(Facade Pattern)是一使用频率非常高的结构型设计模式,其核心思想是为子系统中的一组接口提供一个一致的界面。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。...简而言之,外观模式就是客户端与复杂子系统之间的一个简单而统一的接口。外观模式的概念在软件系统中,由于系统的复杂性及对模块间解耦的需要,引入外观模式可以减少系统的相互依赖,提高灵活性。...外观模式的优点降低了客户端与子系统之间的耦合度:客户端只需要与外观类交互,不需要直接与子系统内部的复杂结构打交道。...外观模式的缺点不符合开闭原则:当添加新的子系统或者移除现有子系统时,可能需要修改外观类或客户端的代码。可能会导致系统过于复杂:如果过度使用外观模式,可能会增加系统中类的数量,从而增加系统的复杂度。...我们可以使用外观模式来简化与这些子系统的交互过程。

    13410

    23设计模式之代理模式

    代理模式的定义 代理模式是一个使用率非常高的模式,其定义为: 为其他对象提供一代理以控制对这个对象的访问 代理模式也叫做委托模式, 它是一项基本设计技巧....许多其他的模式, 如状态模式、策略模式、访问者模式本质上是在更特殊的场合采用了委托模式, 而且在日常的应用中, 代理模式可以提供非常好的访问控制. 代理模式的通用类图如下: ?...这样就实现了一个简单的代理 代理模式的应用 代理模式的优点: 职责清晰, 真实的角色就是实现实际的业务逻辑, 不用关心其他非本职责的事务, 通过后期的代理完成一件事务,附带的结果就是编程简洁清晰 高扩展性..., 具体主题角色是随时都会发生变化的, 只要它实现了接口, 甭管它如何变化, 都逃不脱接口, 我们的代理类完全就可以在不做任何修改的情况下使用 智能化 代理模式的使用场景: 为什么要用代理模式呢?...、企业平台,小到代码片段、事务处理,稍不留意就用到代理模式

    39930

    23设计模式之门面模式

    门面模式的定义 定义: 要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行. 门面模式提供一个高层次的接口, 使得子系统更易于使用....门面模式的应用 门面模式的优点: 减少系统的相互依赖. 如果不使用门面模式, 外界访问直接深入到子系统内部, 相互之间是一强耦合关系, 这样的强依赖是系统设计所不能接受的....想让你访问子系统的哪些业务就开通那些逻辑, 不在门面上开通的方法, 休想访问到 门面模式的缺点: 门面模式最大的缺点就是不符合开闭原则, 对修改关闭, 对扩展开放....门面模式的注意事项 1.一个子系统可以有多个门面 门面已经庞大到不能忍受的重读....还有, 对于一个较大的项目, 为了避免人员带来的风险, 也可以使用门面模式.

    48540

    23设计模式(四)-代理模式

    代理模式有三角色 Real Subject:真实类,也就是被代理类、委托类。用来真正完成业务服务功能; Proxy:代理类。...下面详细讲解这三动态代理机制。 1....那么这个时候,就可用通过动态代理的方式来建立一个中间人给客户端使用,也方便框架进行搭建逻辑,某种程度上也是客户端代码和框架松耦合的一表现。 3)Spring AOP 采用了动态代理模式 5....代理模式和其他模式的区别 1. 代理模式和装饰器模式的区别 我们来看看代理模式和装饰器模式的UML图 代理模式 ? 装饰器模式 ? 两模式的相似度很高....代理模式和适配器模式的区别 适配器模式主要改变所考虑对象的接口,而代理模式不能改变所代理类的接口 来看看代理模式和适配器模式的UML图

    34530
    领券