23种设计模式

23种设计模式之单例模式singleton

走远了吗. 提交于 2019-12-02 18:55:17
1、创建单例模式的原因 节省系统资源、保持数据的一致性。 例子:windows中只能打开一个任务管理器、线程池、数据库连接池、网站计数器等,都被设计成单例模式。 2、单例模式的特点 (1)只有一个实例对象; (2)由单例类自行创建; (3)对外提供一个访问该单例的全局访问点。(常用static方法) 3、如何构建单例模式 (1)懒汉式 package cn.function.designmodel; public class SingletonTest { // 静态变量,原子操作 private static volatile SingletonTest singletonTest = null; // 用于外部测试是否是单例 public String name = "我是单例1"; // 通过构造私有的构造方法,防止被外部实例化 private SingletonTest() { }; // 对外提供一个实例化的方法,生成单例 public static SingletonTest getInstance() { if (singletonTest == null) { singletonTest = new SingletonTest(); } return singletonTest; } } (2)饿汉式 一旦加载类,就创建一个单例 package cn

23种设计模式通俗理解

徘徊边缘 提交于 2019-12-02 15:23:54
23种设计模式通俗理解 1、FACTORY 工厂方法 追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory 工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。 2、BUILDER建造者模式 MM最爱听的就是“我爱你”这句话了,见到不同地方的MM,要能够用她们的方言跟她说这句话哦,我有一个多种语言翻译机,上面每种语言都有一个按键,见到MM我只要按对应的键,它就能够用相应的语言说出“我爱你”这句话了,国外的MM也可以轻松搞掂,这就是我的“我爱你”builder。(这一定比美军在伊拉克用的翻译机好卖) 建造模式:将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。 3、FACTORY METHOD抽象工厂 请MM去麦当劳吃汉堡,不同的MM有不同的口味,要每个都记住是一件烦人的事情,我一般采用Factory Method模式,带着MM到服务员那儿,说

23种常用设计模式之委派模式

半世苍凉 提交于 2019-12-02 12:44:52
说明 委派模式是一种常用的行为型设计模式,在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。委托模式是一项基本技巧,委派者和被委派者拥有相同的方法和属性。委派模式大量使用在spring,mybatis等开源框架中,理解委派模式的实现原理可以更好理解这些框架源码。 应用场景 用一个对象统一处理请求,并将请求分发到具体的请求处理类上 模式特征 角色 说明 举栗 任务抽象类 申明业务逻辑 Housework 委派者 接收客户端请求,不会直接处理请求,而是将请求分发到不同的被委派者那里,由被委派者处理 Brother 被委派者 处理具体的业务请求 YoungerBrother 代码实现 模拟场景:妈妈让哥哥去买酱油,扫地,然后哥哥有点懒,于是委(wei)派(xie)弟弟去把事情做了… 说明:哥哥和弟弟有完全相同的行为能力(买酱油、扫地),但是哥哥不会去做,而是委派弟弟去完成任务,对妈妈来说,她并不知道是弟弟完成了家务活的工作。 任务抽象类:家务活 public interface Housework { void buySoySauce ( ) ; void sweepTheFloor ( ) ; } 委派者:哥哥 public class Brother { YoungerBrother youngerBrother = new

Java的23种设计模式,详细讲解(二)

无人久伴 提交于 2019-12-01 12:22:31
本人免费整理了Java高级资料,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并发分布式等教程,一共30G,需要自己领取。 传送门: https ://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q 1. 责任链(Chain Of Responsibility) Intent 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链发送该请求,直到有一个对象处理它为止。 Class Diagram Handler:定义处理请求的接口,并且实现后继链(successor) Implementation public abstract class Handler { protected Handler successor; public Handler(Handler successor) { this.successor = successor; } protected abstract void handleRequest(Request request); } public class ConcreteHandler1 extends Handler { public ConcreteHandler1(Handler

Java的23种设计模式,详细讲解(一)

橙三吉。 提交于 2019-12-01 10:20:15
本人免费整理了Java高级资料,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并发分布式等教程,一共30G,需要自己领取。 传送门 : https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q 一、概述 设计模式是解决问题的方案,学习现有的设计模式可以做到经验复用。 拥有设计模式词汇,在沟通时就能用更少的词汇来讨论,并且不需要了解底层细节。 二、创建型 1. 单例(Singleton) Intent 确保一个类只有一个实例,并提供该实例的全局访问点。 Class Diagram 使用一个私有构造函数、一个私有静态变量以及一个公有静态函数来实现。 私有构造函数保证了不能通过构造函数来创建对象实例,只能通过公有静态函数返回唯一的私有静态变量。 Implementation Ⅰ 懒汉式-线程不安全 以下实现中,私有静态变量 uniqueInstance 被延迟实例化,这样做的好处是,如果没有用到该类,那么就不会实例化 uniqueInstance,从而节约资源。 这个实现在多线程环境下是不安全的,如果多个线程能够同时进入 if (uniqueInstance == null) ,并且此时 uniqueInstance 为 null,那么会有多个线程执行

[转]23种设计模式总结

瘦欲@ 提交于 2019-12-01 08:04:32
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种设计模式概述

倖福魔咒の 提交于 2019-12-01 05:30:29
23种设计模式,六大设计原则:开放封闭原则、单一职责、里氏替换原则、依赖倒置原则、迪米特原则、接口隔离原则、合成复用原则 1. 设计模式对应的类图 2. 应用场景 3. 优缺点 设计模式 有两种分类方法,即根据模式的目的来分和根据模式的作用的范围来分。 1. 根据目的来分 根据模式是用来完成什么工作来划分,这种方式可分为创建型模式、结构型模式和行为型模式 3 种。 创建型模式:用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。GoF 中提供了单例、原型、工厂方法、抽象工厂、建造者等 5 种创建型模式。 结构型模式:用于描述如何将类或对象按某种布局组成更大的结构,GoF 中提供了代理、适配器、桥接、装饰、外观、享元、组合等 7 种结构型模式。 行为型模式:用于描述类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,以及怎样分配职责。GoF 中提供了模板方法、策略、命令、职责链、状态、观察者、中介者、迭代器、访问者、备忘录、解释器等 11 种行为型模式。 2. 根据作用范围来分 根据模式是主要用于类上还是主要用于对象上来分,这种方式可分为类模式和对象模式两种。 类模式:用于处理类与子类之间的关系,这些关系通过继承来建立,是静态的,在编译时刻便确定下来了。GoF中的工厂方法、(类)适配器、模板方法、解释器属于该模式。 对象模式:用于处理对象之间的关系

23种设计模式----适配器模式----结构模式

可紊 提交于 2019-11-30 15:09:17
文章目录 适配器模式 1.适配器模式介绍 2.适配器模式角色 3.适配器模式的实现 需求 现有 工具类 3.1继承方式实现适配器 3.2组合的方式 3.3适配器模式实现扩展 3.4文档结构及名称 3.5总结 4.适配器模式的使用 4.1使用适配器可以在不更改原有类的基础上增加新类,这样出现bug也是在新类中,比在原有类的基础上修改好的多。 4.2修改原有类需要对原有类进行测试,如果只是改动比较小,但是测试比较麻烦的类,使用适配器的代价小的多。 4.3版本升级,新版本兼容旧版本。 23种设计模式 适配器模式 1.适配器模式介绍 引入:显示生活中,有许许多多的的电器在被使用,但是我们普通家用电线的电压是220V(一般)。但是家里的电器却又很多种: 手机充电:5V 手电筒:12V、5V 电视机:220V 笔记本:12V (电器电压不一定正确) 。。。。。。。。 那么,为什么只提供一种电压却满足了这么不同电压需求的电器。 原因就是每一种电器都有各自的电压转换器(变压器),笔记本是充电适配器(外)电视机(内)手机充电头(电源适配器) 所以,生活中处处可见各种各样的适配器。 在程序世界中,经常会存在有的程序无法直接使用,需要做适当的变换之后才能使用的情形(源自《图解设计模式》)。适配器模式就是连接“现有程序”和“目标程序”的中间程序。 2.适配器模式角色 通俗的理解: 需求-Target

23种设计模式中篇

为君一笑 提交于 2019-11-30 09:52:51
结构型设计模式 ,共7种 (1) 桥接模式 桥接模式 将抽象和实现部分的分离 ,更好的可扩展性,桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围有一定的局限性 //抽象的实现类 public interface Memory { void addMemory(); } //具体的实现类 public class Memory6G implements Memory{ @Override public void addMemory() { System.out.println("安装了6G内存"); } } //具体的实现类 public class Memory8G implements Memory{ @Override public void addMemory() { System.out.println("安装了8G内存"); } } //具体部分的抽象 public abstract class Phone { protected Memory memory; public void setMemory(Memory memory) { this.memory = memory; } protected abstract void buyPhone(); } public class Huiwei extends Phone{ @Override

23种设计模式

时光怂恿深爱的人放手 提交于 2019-11-29 06:18:50
目录 创建型 1. Factory Method (工厂方法) 2. Abstract Factory (抽象工厂) 3. Builder (建造者) 4. Prototype (原型) 5. Singleton (单例) 结构型 6. Adapter Class/Object (适配器) 7. Bridge (桥接) 8. Composite (组合) 9. Decorator (装饰) 10. Facade (外观) 11. Flyweight (享元) 12. Proxy (代理) 行为型 13. Interpreter (解释器) 14. Template Method (模板方法) 15. Chain of Responsibility (责任链) 16. Command (命令) 17. Iterator (迭代器) 18. Mediator (中介者) 19. Memento (备忘录) 20. Observer (观察者) 21. State (状态) 22. Strategy (策略) 23. Visitor (访问者) 创建型 1. Factory Method (工厂方法) 意图: 定义一个用于创建对象的接口,让子类决定实例化哪一个类。 Factory Method 使 一 个类的实例化延迟到其子类。 适用性: 当一个类不知道它所必须创建的对象的类的时候。