23种设计模式

Java中23种设计模式详解

别来无恙 提交于 2020-02-06 04:07:35
Java 中 23 种设计模式详解 通常,一个设计模式描述了一个被证实可行的方案。这些方案非常普遍,是具有完整定义的最常用的模式。一般模式有 4 个基本要素:模式名称 (pattern name) 、问题 (problem) 、解决方案 (solution) 、效果 (consequences) 。   常见的 Java 设计模式有以下 23 种:     1 、抽象工厂模式 (Abstract Factory) :提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。    2 、适配器模式 (Adapter) : 将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口或类不兼容而不能一起工作的类可以一起工作。    3 、桥梁模式 (Bridge) : 将抽象部分与它的实现部分分离,使它们都可以独立地变化。    4 、建造模式 (Builder) : 将一个复杂对象的构建与它的表示分离,使同样的构建过程可以创建不同的表示。    5 、责任链模式 (Chain of Responsibility) : 为解除请求的发送者和接收者之间耦合,而使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。    6 、命令模式 (Command) : 将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化

23种设计模式

孤街浪徒 提交于 2020-02-06 03:04:44
1.单例模式(Singleton Pattern) 定义: Ensure a class has only one instance, and provide a global point of access to it.(确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。) 通用代码:(是线程安全的) public class Singleton { private static final Singleton singleton = new Singleton(); //限制产生多个对象 private Singleton(){ } //通过该方法获得实例对象 public static Singleton getSingleton(){ return singleton; } //类中其他方法,尽量是static public static void doSomething(){ } } 使用场景: ● 要求生成唯一序列号的环境; ● 在整个项目中需要一个共享访问点或共享数据,例如一个Web页面上的计数器,可以不用把每次刷新都记录到数据库中,使用单例模式保持计数器的值,并确保是线程安全的; ● 创建一个对象需要消耗的资源过多,如要访问IO和数据库等资源; ● 需要定义大量的静态常量和静态方法(如工具类)的环境,可以采用单例模式(当然

23种设计模式

女生的网名这么多〃 提交于 2020-02-06 02:57:58
23种模式java实现源码 收集五年的开发资料下载地址 : http://pan.baidu.com/share/link?shareid=3739316113&uk=4076915866#dir/path=%2Fstudy 一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。用一个图片来整体描述一下: 二、设计模式的六大原则 1、开闭原则(Open Close Principle) 开闭原则就是说 对扩展开放,对修改关闭 。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。 2、里氏代换原则(Liskov Substitution Principle) 里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。

java的23种设计模式

血红的双手。 提交于 2020-02-06 01:24:57
java 23种设计模式 深入理解 1、设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。 使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化;设计模式是 软件工程 的基石脉络,如同大厦的结构一样。 2、设计模式的六大原则 2.1、开闭原则(Open Close Principle) 开闭原则就是说 对扩展开放,对修改关闭 。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。 2.2、里氏代换原则(Liskov Substitution Principle) 里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现

23种设计模式

此生再无相见时 提交于 2020-01-29 05:41:07
原文:https://www.cnblogs.com/cainiao-chuanqi/p/10957708.html 1、根据目的分类: 创建模式: 描述“怎样创建对象”,分离对象的创建与使用。如spring的IOC。 共5种:单例、原型、工厂方法、抽象工厂、建造者 结构模式: 描述如何将类或对象按某种布局组成更大的结构。 共7种:代理、适配器、桥接、装饰、外观、享元、组合 行为模式: 描述类或对象之间如何协作共同完成单个对象都无法单独完成的任务,以及怎样分配职责。 共11种:模板方法、策略、命令、职责链、状态、观察者、中介者、迭代器、访问者、备忘录、解释器。 2、根据应用范围分类: 类模式: 静态,编译时刻便确定。 共4种:工厂方法、适配器、模板方法、解释器。 对象模式: 动态,执行时确定。 共21种,除类模式之外的所有 3、解释: 创建型模式: 单例(Singleton)模式:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式。 原型(Prototype)模式:将一个对象作为原型,通过对其进行复制而克隆出多个和原型类似的新实例。 工厂方法(FactoryMethod)模式:定义一个用于创建产品的接口,由子类决定生产什么产品。 抽象工厂(AbstractFactory)模式:提供一个创建产品族的接口,其每个子类可以生产一系列相关的产品。 建造者

23种设计模式 VOL.16: 迭代器模式

不打扰是莪最后的温柔 提交于 2019-12-27 07:21:33
思想: 为多种容器提供统一的迭代接口(迭代方式不同), 客户端不需要关心怎么遍历; 使用场景: 当遍历不同的容器则需要多种遍历方式, 会暴露元素的内部结构, 这种情况就用迭代器模式将具体容器指定对应迭代方式, 客户端只要操作迭代接口(Iterator), 无需关心内部是怎么迭代的; 遍历学校下的学院和院系 代码实现 迭代器 容器与迭代器关联 Java中用到的地方 ArrayList类中有个Ite内部类能返回可以遍历集合的迭代器 来源: CSDN 作者: HackDream2020 链接: https://blog.csdn.net/aa503709643/article/details/103627495

23种设计模式之装饰模式

扶醉桌前 提交于 2019-12-24 12:00:04
装饰模式的定义 定义: 动态的给一个对象添加一些额外的职责. 就增加功能来说, 装饰模式相比生成子类更为灵活. 通俗的说, 就是对一个类或方法进行包装 装饰模式的通用类图: 类图中的四个角色说明如下: Component 抽象构件: Component是一个接口或抽象类, 就是定义我们最核心的角色, 也就是最原始的对象. 在装饰模式中, 必然有一个最基本、最核心的接口或抽象类充当 Component 抽象构件 ConcreteComponent 具体构件: ConcreteComponent 是最核心、最原始、最基本的接口或抽象类的实现, 要装饰的就是它 Decorator 装饰角色: 一般是一个抽象类, 实现接口或抽象方法, 它里面不一定有抽象的方法, 在它的属性中必然有一个private变量指向Component抽象构件 具体装饰类: ConcreateDecrator是具体的装饰类, 要把最核心的、最原始的、最基本的东西装饰成其他东西. 当只有一个装饰类时, 可以没有抽象装饰角色 具体实现代码如下: 抽象装饰者代码: 具体装饰者代码: 场景类: 装饰模式应用 装饰模式的优点: 装饰类和被装饰类可以独立发展, 而不会相互耦合. 也就是说, Component 类无需知道 Decorator 类, Decorator 类是从外部来扩展 Component类的功能,

23种设计模式——策略模式(Strategy)

爱⌒轻易说出口 提交于 2019-12-17 18:56:31
一、策略模式 策略模式(Strategy),定义了一组算法,将每个算法都封装起来,并且使它们之间可以互换。比如出行方式,可以选择骑自行车、坐公交车、打车、开车等等,每种出行方式都是一个策略。 二、策略模式的应用 1.使用场景 针对同一类型的问题,有多种处理方式,每一种都能独立解决问题且区分它们的只是它们直接的行为。算法需要自由切换的场景。需要屏蔽算法规则的场景。 2.使用方式 strategy类,定义所有支持的算法的公共接口。 concreteStrategy,封装具体的方法或行为,继承strategy类。 context,用一个concreteStrategy来配置,维护一个对strategy的引用。 简单工厂或枚举类生成Context对象。 3.主要解决 有多种算法相似的情况下,大量使用if else为程序带啦的负责性和臃肿性。 4.优点 算法的多样性,且具备自由切换场景。有效避免多重条件判断,增强了封装性,简化的操作,降低出错概率。扩展性良好,策略类遵循里氏替换原则,可以很方便的进行策略扩展。 5.缺点 策略类数量增多,每个策略都是一个类,复用的可能性很小。所有策略类必须对外暴露,以便客户端能够选择。 6.注意事项 如果一个系统的策略多于四个,就需要考虑使用混合模式来解决策略膨胀的问题。 三、策略模式的实现 1.strategy public abstract class

java 中 有 23 种设计模式

半城伤御伤魂 提交于 2019-12-15 01:41:03
java 中 有 23 种设计模式。 设计类的要求: 高内聚、低耦合。 高内聚: 类的内部的成员之间的关系是非常紧密的。 低耦合: 类和类之间的耦合度要尽量小。 简单工厂模式的作用:降低类和类之间的耦合度的。 /** * 简单工厂模式,用来创建对象的 * @author yhl * */ public class MyFactory { //写一个工厂方法,通过传入的字符串的值,创建对应的类的对象并返回。 public static Person createPerson(String className){ Person person = null; //根据类名,给person 赋值不同的子类对象 switch(className){ case "Chinese": person = new Chinese("炎黄子孙中国人"); break; case "America": person = new America("美国佬"); break; case "Japanese": person = new Japanese(); break; case "Indian": person = new Indian("阿三"); break; case "Italian": person = new Italian("意大利"); break; } return person; }

23种设计模式知识点详细解析(含PDF学习资料)

可紊 提交于 2019-12-10 23:37:21
前言: Java 中一般认为有 23 种设计模式,我们不需要所有的都会,但是其中常用的几种设计模式应该去掌握。下面列出了所有的设计模式。虽然不需要全会,当然能掌握的越多越好。 总体来说设计模式分为三大类: 创建型模式 共5种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式 共7种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式 共11种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 由于篇幅的限制,没有办法把23种设计模式全部详细的分享给大家,但是整理成了Pdf资料可以分享,关注我的供种浩(Java周某人)即可 一.单例模式(Singleton Pattern) 定义: Ensure a class has only one instance, and provide a global point of accessto it.(确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。) 通用代码(是线程安全的) 使用场景: ● 要求生成唯一序列号的环境; ● 在整个项目中需要一个共享访问点或共享数据,例如一个 Web 页面上的计数器,可以不用把每次刷新都记录到数据库中,使用单例模式保持计数器的值,并确保是线程安全的; ●