设计模式(Java版)
Java代码示例讲解设计模式
yipengup
做简单的自己。
展开
-
结构型模式之组合模式
结构型模式之组合模式1. 简介组合模式(Composite Pattern)又叫部分整体模式。他创建了对象组的树形结构,将对象组合成树状结构表示整体-部分的层次关系。简单来说,组合模式常用于构建具有层级关系的类结构。组合模式依据树形结构来组合对象,层级高的为父节点,最底层为叶子节点,层级高的包含子节点。所有的对象都是节点,具有统一的类型,组合模式使得客户端对单个对象和组合对象的访问具有一致性,即组合模式能让客户端以一致的方式处理单个对象或者是组合对象。2. 组合模式相关角色Compone原创 2020-10-15 09:54:02 · 158 阅读 · 0 评论 -
结构型模式之装饰者模式
结构型模式之装饰者模式1. 简介装饰者模式(Decoretor Pattern)别名也叫包装器(Wrapper)。主要作用就是已对客户透明的方式动态的给一个对象增加一些额外的职责。透明的方式:客户端并不会觉得对象在装饰前和装饰后有什么不同。动态:给对象添加的职责是可以控制的,不同的装饰器实现类具有不同的职责。简单来说,装饰器模式就是为原有的对象添加一些额外的功能,装饰器通过与被装饰者组合后,就可以对原有的被装饰者对象进行职责添加。为什么对象在装饰前和装饰后客户端并不会觉得对象有什么不同?是因原创 2020-10-15 09:53:19 · 86 阅读 · 0 评论 -
结构型模式之享元模式
结构型模式之享元模式1. 简介享元模式(Flyweight Pattern)也叫蝇量模式。享,表示共享;元,表示对象。享元模式就是利用共享技术实现大量细粒度对象的重用。什么是细粒度对象?享元模式中将对象的内容区分为内部状态和外部状态。内部状态指对象共享出来的信息,存储在享元对象的内部不会随着环境的变化而变化。外部状态指对象得以依赖的一个标记,是随着环境改变而改变不可共享的状态。举例来说,线程池就是用来管理共享线程对象的工厂容器,普通线程对象中线程的状态是需要共享的内容就是内部状态, 而对原创 2020-10-15 09:52:41 · 73 阅读 · 0 评论 -
结构型模式之外观模式
结构型模式之外观模式1. 简介外观模式(Facade Pattern)又叫门面模式。外观模式主要就是说提供一个接口用控制访问一系列子接口。对于客户端来说, 只与高层接口打交道,并不知道真正执行的子系统细节。2. 代码演示情景描述:我们平时通过遥控器控制电视的开关,做到一键启动和一键关闭。这里的遥控器就是客户端,电视就是外观模式中的高层接口。遥控器与电视直接交互,不知道电视内部子系统的执行细节。打开电视,打开显示器,启动相应的启动类软件。关闭电视,关闭所有的软件,关闭显示器。2.1原创 2020-10-15 09:51:50 · 84 阅读 · 0 评论 -
结构型模式之适配器模式
结构型模式之适配器模式1. 简介适配器模式(Adapter Pattern)主要就是将某个类的接口转换成客户端期望的另一份接口,让原本因接口不匹配不能一起工作的两个类可以协同工作。适配器的别名也叫包装器(Wrapper)。简单来说, 与客户端交互的是适配器,客户端是感知不到被适配者的存在。客户端与适配器交互时,真正底层工作就是被适配者。2. 适配器的分类适配器的分类依赖于被适配者和适配器组合的形式。类适配器,适配器继承被适配者对象适配器,适配器与被适配者采用组合的关系接口适配器,默原创 2020-10-15 09:51:13 · 103 阅读 · 0 评论 -
结构型模式之桥接模式
结构型模式之桥接模式1. 简介桥接模式(Bridge Pattern)又叫接口模式(Interface Pattern)。桥接模式主要是说将实现和抽象放在两个不同的类层次中,使两个层次可以独立改变。桥接模式基于类的最小设计原则,通过使用封装、聚合、继承等行为让不同类承担不同的责任。主要特点是将抽象和行为实现分离开来,从而可以保持各部分的独立性以及应对他们的功能扩展。简单来说,就是从多个维度考虑设计一个类时,可以将每个维度抽象出来形成一个接口或者是抽象类,最后再以组合的形式将接口的实现类组合在一原创 2020-10-15 09:50:42 · 120 阅读 · 1 评论 -
结构型模式之代理模式
结构型模式之代理模式1. 简介代理模式(Proxy Pattern)主要是为一个对象提供一个替身,客户端通过这个替身可以对目标对象进行访问。代理的底层原理基本上就是当执行代理的某个方法时,底层真正执行者就是被代理对象,只是说代理对象负责与客户端进行交互。注意:代理模式真正的核心是提供一个替身去访问目标对象,其中对原方法做一些增强只是代理模式的附属品。2. 静态代理静态代理的静态就是通过硬编码,在代码还没运行时就确定代理类代理的目标类。代理条件:被代理类要有实现一个接口。核心逻辑就是代理原创 2020-10-15 09:49:53 · 59 阅读 · 0 评论 -
行为型模式之状态模式
行为型模式之状态模式1. 简介状态模式(State Pattern)是指对有状态的对象,把复杂的判断逻辑提取到不同的状态对象中,允许状态对象在其内部状态发生变化时改变其行为。什么是有状态的对象?对象的某些属性与外部事件产生互动时会发生改变,从而使对象表现出不同的行为,这种影响对象行为的一个或者多个动态变化的属性称为状态,拥有状态属性的对象就是有状态对象。2. 相关角色Context- 上下文环境。负责维护一个当前状态,并将与状态相关的操作交给当前状态来处理。该类负责与客户端交互。简单来说原创 2020-10-14 19:16:11 · 88 阅读 · 0 评论 -
行为型模式之中介者模式
行为型模式之中介者模式1. 简介中介者模式(Mediator Pattern)又叫调停模式。中介者模式主要是定义一个中介对象来封装一系列对象之间的交互,使原有对象之间耦合松散,且可以独立的改变他们之间的交互。简单来说,多个对象之间的相互交互, 交给中间人去传话处理,实现多个对象之间的解耦,直接交互变为间接交互。独立改变: 当交流的规则发生改变时, 我们只需要修改中间人传话规则就行。2. 角色Mediator- 抽象中介者,因为涉及到多个对象的之间的交互, 所以需要提供管理对象的注册功能原创 2020-10-14 19:15:26 · 108 阅读 · 0 评论 -
行为型模式之职责链模式
行为型模式之职责链模式1. 简介职责链模式(Chain Of Resposibility Pattern):又叫责任链模式,为请求创建了一个接收者对象的链。简单来说, 将客户端与处理客户端请求的接收者进行解耦, 防止出现客户端与请求接收者交互式处理问题。当客户端发出请求时,由请求的接收者链式处理完之后将结果返回给客户端。举例来说, 当客户端发起请求时, 接收者A处理完交给接收者B处理, 接收者B处理完交给接收者C处理,以此类推,直到链式处理完请求将结果返回给客户端。在比如, Spring中队请求原创 2020-10-14 19:14:55 · 64 阅读 · 0 评论 -
行为型模式之模板方法模式
行为型模式之模板方法模式1. 简介模板方法模式(Template Method Pattern)又叫模板模式(Template Pattern)。模版方法模式主要就是建立一个抽象类定义一个算法的骨架,而将算法的一些步骤延迟到子类中完成,使得子类可以在不改变算法骨架的情况下,重新定义该算法中某些特定的步骤。注意:抽象类中的骨架方法最好用final修饰,防止子类对骨架方法进行重写。我们一般会在骨架方法中定义若干个钩子函数,使子类在某些步骤前后实现一些定制化逻辑。2. 代码演示情景描述:原创 2020-10-14 19:13:58 · 80 阅读 · 0 评论 -
行为型模式之命令模式
行为型模式之命令模式1. 简介命令模式(Command Pattern)主要就是说将命令抽象化成对象,使得命令的发起者和命令的执行者进行解耦,两者之间通过命令交互,这样方便对命令进行管理。简单来说,就是将执行命令抽象化成对象进行管理,比如我们可以将要执行的命令保存到队列中,队列依次执行相应的命令。2. 角色描述Command- 命令抽象化的接口,一般会定义命令的执行方法。ConcreteCommand- 实际具体的命令对象,一般命令对象会与命令的执行者产生组合依赖,方便执行者执行命令。原创 2020-10-14 19:13:21 · 71 阅读 · 0 评论 -
行为型模式之解释器模式
行为型模式之解释器模式1. 简介解释器模式(Interpreter Pattern)指的是给定一个表达式,定义它的文法的一种表示,并定义个解释器,使用该解释器来解释表达式。比如,Mybaties、hibernate都有自己的文法,使用者需要编写类似的SQL文法的语句,然后交给ORM框架进行解析然后执行。2. 相关角色Abstrat Expression- 抽象表达式解释器, 定义解释器的接口,主要就是声明interpret方法。Terminal Expression- 终结符表达式解释器原创 2020-10-14 19:12:43 · 87 阅读 · 0 评论 -
行为型模式之解释器模式
行为型模式之解释器模式1. 简介解释器模式(Interpreter Pattern)指的是给定一个表达式,定义它的文法的一种表示,并定义个解释器,使用该解释器来解释表达式。比如,Mybaties、hibernate都有自己的文法,使用者需要编写类似的SQL文法的语句,然后交给ORM框架进行解析然后执行。2. 相关角色Abstrat Expression- 抽象表达式解释器, 定义解释器的接口,主要就是声明interpret方法。Terminal Expression- 终结符表达式解释器原创 2020-11-05 18:10:03 · 175 阅读 · 0 评论 -
行为型模式之观察者模式
行为型模式之观察者模式1. 简介观察者模式(Observer Pattern)又叫发布订阅模式(Publish Subscription Pattern)。观察者模式指的是多个对象间存在一对多的依赖关系, 当一个对象的状态发生改变时,所有依赖与它的对象都得到通知并自动更新。发布者,是一对多对象关系中的1,负责管理和维护多个订阅者,当自身状态发生改变时,通知订阅者作相应的处理。订阅者,是一对多对象关系中的多,负责当接收到发布者通知时作相应的处理。2. 角色Subject- 抽象的发布者,原创 2020-10-13 10:02:50 · 388 阅读 · 1 评论 -
行为型模式之访问者模式
行为型模式之访问者模式1. 简介访问者模式(Visitor Pattern)主要是指有多种不同的处理方式处理一个对象中集合属性中的元素。此时这里不同的处理方式抽象出来就是访问者对象,每个访问者对于属性中元素都有自己的不同的理解和处理方式。注意:集合中的元素的种类是确定的, 因为对于访问者来说,对于不同的元素需要提前定义好不同的处理方式。但是对于元素的个数是不确定的,集合中可以有一个种类的多个元素。举例说明:对于游乐场, 游乐场中有多种不同的游乐玩具,对于游客来说有大人和小孩,大人和小孩对于游乐原创 2020-10-13 10:02:18 · 147 阅读 · 1 评论 -
行为型模式之迭代器模式
行为型模式之迭代器模式1. 简介迭代器模式(Iterator Pattern)主要就是说提供一种遍历集合元素的统一接口,在不需要知道集合底层表示的情况下,用一致的方法遍历集合对象。简单来说, 不用管集合底层是数组还是Java中的其他集合类, 统一都可以用一致的方法进行处理。2. 角色Iterator- 抽象迭代器接口,用于定义统一处理集合的方法,常见的方法就是hasNext、next、remove等。ConcreteIterator- 具体的迭代器对象,实现了迭代器接口中处理集合的方法,原创 2020-10-13 10:01:44 · 244 阅读 · 1 评论 -
行为型模式之策略模式
行为型模式之策略模式1. 简介策略模式(Strategy Pattren)是指封装一系列算法使他们之间可以相互替换,且算法的变化不会影响使用算法的客户。简单来说, 就是将用户某类行为抽象化成接口, 并提供一系列的实现。用来给用户赋予不同的行为属性,用户就表现出不同的行为。举例来说,旅行可以有坐飞机、坐动车等,做螃蟹可以有清蒸、红烧等。2. 相关角色Context- 上下文, 持有策略类的引用,也就是该用户的某类行为被抽象出来的。Strategy- 抽象策略接口, 用来定义抽象策略方法原创 2020-10-13 10:01:18 · 104 阅读 · 0 评论 -
行为型模式之备忘录模式
行为型模式之备忘录模式1. 简介备忘录模式(Memento Pattern)又叫快照模式, 主要就是保存对象在某一个时间的状态信息。备忘录模式就是程序中的后悔药。备忘录模式指的是在不破坏代码的封装性的前提下, 捕获一个对象的内部状态, 并在该对象之外保存这个状态, 以便以后当需要的时候能将该对象恢复到原先保存的状态。2. 角色Originator- 发起人,需要保存状态的对象。Memento- 备忘录,用于保存对象状态的对象。Caretaker- 管理者, 管理备忘录对象的对象, 提原创 2020-10-13 10:00:15 · 66 阅读 · 0 评论 -
创建型模式之原型模式
创建型模式之原型模式1. 简介原型模式(Prototype Pattern)是一种根据原型实例创建指定的类对象。简单来说就是在已知原有的类对象的情况下, 可以通过拷贝的方式获取到该类的新对象。在Java中Object类提供了clone方法,所以每个类都具有克隆的功能。2. 使用clone方法注意细节原型类必须实现 Cloneable 接口。原型类有必要重写 clone 方法, 因为从Object类继承过来的clone方法默认访问权限为protected, 需要重写该方法扩大访问权限。对于原创 2020-10-13 09:59:43 · 95 阅读 · 0 评论 -
创建型模式之建造者模式
创建型模式之建造者模式1. 简介建造者模式(Builder Pattern)又叫做生成器模式。他可以将复杂对象的建造过程抽象出来,使这个抽象过程的不同实现方法可以构建出不同表现的对象。简单来说,建造者模式是将对象属性的赋值操作分离出来,通过一系列的操作对对象的属性进行赋值, 不同的操作导致对象的属性不同,也就可以构建出不同表现的对象。注意,不是说一个操作对应一个赋值操作,两者之间没有数量关系。2. 建造者模式的四个角色Product- 最终需要生成的产品对象类。Builder- 抽象建造原创 2020-10-13 09:59:13 · 65 阅读 · 0 评论 -
创建型模式之简单工厂模式
创建型模式之简单工厂模式简单工厂模式(Simple Factory)又称为静态工厂方法模式(Static Factory Method)。简单工厂模式简单来说就是根据参数的不同返回不同类的实例。特点简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。代码演示类图[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jwkkaf81-1602554304537)(https://raw.githubusercontent.com/in原创 2020-10-13 09:58:42 · 312 阅读 · 1 评论 -
创建型模式之工厂方法模式
创建型模式之工厂方法模式1. 简介工厂方法模式(Factory Method Pattern)是一种将创建对象的方法抽象化到抽象父类或者接口中, 然后实际的创建对象的逻辑交给子类去完成的一种模式。简单来说,就比如服装行业,大工厂只负责设计衣服的版面(建立生产衣服的规范),具体生产衣服需要由子工厂自己实现。2. 代码展示场景描述:此时, 我们需要建立一个支付服务体系。 消费者需要什么支付服务就从工厂类中获取对应的支付服务就行。父工厂负责建立创建支付服务的规范,具体的支付服务工厂实现具体的获原创 2020-10-13 09:58:14 · 258 阅读 · 0 评论 -
创建型设计模式之单例模式
创建型设计模式之单例模式单例模式(Singleton Pattern)采取一定的方法保证在整个软件系统中, 对某个类只能存在一个对象实例。使用单例模式减少对象的创建,可提升系统的性能,节省系统的资源。一般来说,实现的方式就是该类只提供一个静态方法获取其对象实例的入口。单例模式三种实现方式饿汉式在类加载的时候, 对象实例就随之创建。饿汉式实现方式之静态常量式package com.inconspicuousy.pattern.singleton.hungry;class Singl原创 2020-10-13 09:57:41 · 89 阅读 · 0 评论 -
创建型模式之抽象工厂模式
创建型模式之抽象工厂模式1. 简介抽象工厂模式(Abstract Factory Pattern)本质上是简单工厂模式和工厂方法模式的结合体。简单工厂模式和工厂方法模式面向的创建单一对象, 而抽象工厂模式面向的多元化的产品, 提供多种对象的创建。以服装举例来说,在很久之前,服装都是有用户自己在家里自产自;随着需求的提升,就有了专门的工厂来生产服装,也就有了简单工厂; 随着用户对服装个性化的差异性需求提升,简单工厂越做越大,实现将产品根据不同的款式由不同的工厂生产,总厂只负责定制服装的规范,这就有原创 2020-10-12 14:54:50 · 340 阅读 · 0 评论 -
设计模式的分类
设计模式的分类设计模式分为三种类型。创建型模式创建型模式(Creational Pattren)处理对象创建的设计模式。重点关注的是对象的创建。单例模式简单工厂模式工厂方法模式抽象工厂模式原型模式建造者模式结构型模式结构型模式(Structural Pattern)处理类或者对象之间的布局关系的设计模式。重点关注的是类或者对象的结构。适配器模式桥接模式装饰模式组合模式外观模式享元模式代理模式行为型模式行为型模式(Behavioral Patter原创 2020-10-12 14:54:16 · 64 阅读 · 0 评论 -
UML图中各种耦合关系说明
UML图中各种耦合关系说明开头声明以下UML类图都是依赖idea中Diagrams功能, 与实际的类图会有些许的差别, 比如组合和聚合, idea中都是用实心菱形表示, 但是实际的类图中, 聚合采用的是空心菱形, 组合采用的是实心菱形.依赖关系只要类中用到了对方, 那么他们之间就存在依赖关系(Dependence).类图代码演示package com.inconspicuousy.uml.dependency;class A {}class B extends A {}cla原创 2020-10-12 14:53:13 · 1230 阅读 · 0 评论 -
设计模式七大原则之依赖倒转原则
设计模式七大原则之依赖倒转原则一. 什么是依赖倒转原则依赖倒转原则:面向接口编程1.1 特点抽象不应该依赖细节,细节应该依赖抽象。使用抽象的目的是制定好规范,而不涉及具体的操作,把展现细节的任务交给他们的细节去完成。注意:在Java中,抽象就是接口或者抽象类, 细节就是具体的实现类。所以简单来说依赖倒置就是提倡面向接口编程。1.2 依赖关系传递的三种方式接口传递:在普通方法中使用接口或抽象类作为形参。构造方法传递: 通过构造方法对本类的抽象类或者接口进行赋值。setter方原创 2020-10-12 14:52:33 · 273 阅读 · 1 评论 -
设计模式七大原则之里氏替换原则
设计模式七大原则之里氏替换原则一、继承1.1 继承的含义父类中凡是已经实现好的方法, 实际上是在设定规范和契约, 虽然他不强制要求所有的子类必须遵循这些契约, 但是如果子类对这些已经实现的方法任意修改, 就会对整个继承体系造成破坏.1.2 继承的弊端增加对象间的耦合性, 给程序带来侵入性如果一个类被其它类所继承, 则当这个类需要修改时, 必须考虑到所有的子类, 并且父类修改后, 所有涉及到的子类的功能都有可能产生故障.二、什么是里氏替换原则所有引用父类的地方必须能透明地使用其子类的对象原创 2020-10-12 14:52:09 · 110 阅读 · 0 评论 -
设计模式七大原则之开闭原则
设计模式七大原则之开闭原则一、什么是开闭原则开闭原则(open close principle)简称ocp原则, 指的是对扩展开放, 对修改关闭.扩展开放:针对的是提供方, 对功能扩展开放.修改关闭:针对的使用方, 对修改关闭.二、实现开闭原则的方式用抽象构建框架, 用实现扩展细节: 当软件需要变化时, 尽量通过扩展软件实体的行为来实现变化, 而不是通过修改已有的代码来实现变化.三、错误案例实现3.1 类图这里主要就是通过Graphic类可以作出不同的形状, 但是值得关注的是原创 2020-10-12 14:50:44 · 391 阅读 · 2 评论 -
设计模式七大原则之接口隔离原则
设计模式七大原则之接口隔离原则一. 什么是接口隔离原则接口隔离原则:一个类对另外一个类的依赖应该建立在最小接口上。简单来说,就是一个类不应该实现它不会用到的方法。1.1 类图说明[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jugmcFJn-1602485401973)(https://raw.githubusercontent.com/inconspicuousy/image/master/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8原创 2020-10-12 14:50:16 · 133 阅读 · 0 评论 -
设计模式七大原则之合成复用原则
设计模式七大原则之合成复用原则什么是合成复用原则合成复用原则(Composite Reuse Principle), 尽量使用组合或者聚合的方式而不是继承达到软件复用的原则.继承会增加对象间的耦合性, 继承称之为白箱复用, 相当于把所有的实现细节暴露给子类. 组合/聚合称之为黑箱复用, 对类以外的对象时无法获取到实现细节的.合成复用原则的目的减少对象间的依赖, 是系统更加灵活.错误代码演示类图[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q97V7ks原创 2020-10-12 14:49:51 · 244 阅读 · 0 评论 -
设计模式七大原则之迪米特法则
设计模式七大原则之迪米特法则一、什么是迪米特法则迪米特法则(Demeter Principle)又叫最少知道原则, 一个类对自己依赖的类知道的越少越好简单来说, 迪米特法则有两层含义一个是针对的是依赖其他类的类(以下简称为依赖类), 依赖类只与直接的朋友通信.朋友关系- 只要两个对象之间有耦合关系, 我们就说这两个对象之间是朋友关系.直接朋友关系- 耦合关系出现在成员变量、方法参数、方法返回值中的类为直接的朋友关系.非直接朋友关系- 非直接朋友关系, 常见的就是耦合关系出现在局部变量原创 2020-10-12 14:49:08 · 593 阅读 · 5 评论 -
设计模式七大原则之单一职责原则
设计模式七大原则之单一职责原则一. 什么是单一职责原则简单来说,单一职责原则表示的就是一个类只负责一项职责。比如,类A负责两个不同的职责。当职责1需求变更而改变A类时,可能会对职责2产生影响,为了避免此种情况,我们就要将类A的的粒度分解成A1、A2,此时也就是单一职责原则所要表达的事情。二. 代码示例2.1 错误代码示例此时的A类不满足单一职责原则而引发的问题package com.principle;/** * @author inconspicuousy */public原创 2020-10-12 14:47:26 · 188 阅读 · 0 评论