- 博客(24)
- 收藏
- 关注
原创 设计模式六大原则
一 概述设计模式是什么:1、是对整个软件系统的拆分,组装,并决定模块间关系以及如何互动、通信的某种模式;2、其本质是以语言特性 面向对象三大特性 为出发点,通过设计模式六大原则总结出来的套路;二 六大原则单一职责概念:功能完备的软件系统是复杂的,系统的拆分与模块化是不可或缺的,而面向对象是以类来划分模块边界的(一对大括号“{}”定义了类模块的边界),也就是说每个类都代表着一个功能角色模块,其职责应该是单一的,不是自己分内的事不应该负责;单一职责原则规定,对任何类的修改只能有一个原因;例
2020-07-26 23:27:08
167
原创 Java8 新特性
一 概述Java 8 希望有自己的编程风格,并与 Java 7 区别开;它支持函数式编程,新的 JavaScript 引擎,新的日期 API,新的Stream API 等;本文将介绍一些常用的新特性,如下:Lambda表达式:Lambda 允许把函数作为一个方法的参数(函数作为参数传递到方法中);方法引用:可以直接引用已有Java类或对象(实例)的方法或构造器;与Lambda结合使用,可以使语言的构造更紧凑简洁,减少冗余代码;Optional 类;Stream API:新添加的Strea
2020-07-26 22:07:24
140
原创 设计模式之间的关系
一 策略模式1.1 策略模式与桥接模式策略模式:类似电脑上的USB接口,USB接口可以与符合USB规范的任何设备连接,例如键盘、鼠标等,但USB接口却耦合于宿主机(USB接口需注入宿主机对象),两者之间只有一边是解耦的(USB接口),宿主机无法替换;桥接模式:桥接的两方可以任意替换,从而产生不同的结果,实现双边解耦、分离、脱钩;1.2 策略模式与命令模式策略模式:定义好策略后,策略需要绑定其策略的使用者,用户需通过策略使用者来调用策略的功能;在这种模式中,策略与策略的使用者是强
2020-07-26 22:05:31
367
原创 状态模式State
一 概述描述状态模式前,应先回顾一下策略模式:策略模式:提供描述A、B、C策略的接口,分别实现ABC三种策略,使用时利用多态传入不同策略的实现类给策略使用者即可通过策略使用者使用策略;状态模式:本质是和策略模式一样的,个人理解为是基于策略模式上再包装了一层功能,成为了状态模式;状态模式,即控制状态,无论任何时刻,都必须符合:当前状态只能切换到下一个合理的状态,当前状态不允许切换到当前状态 的规律;二 使用示例介绍一个实现开关状态的代码示例:package cn.http.test;
2020-07-25 21:09:21
174
原创 中介模式Mediator
一 概述中介,是作为多个事物之间充当交互沟通的媒介,在程序也是这样的,对象与对象之间不需要持有对方引用,而是通过中介相互连接;二 使用示例使用聊天室作为中介,支持用户登录、用户注销、用户发言;package cn.hello;/** * 聊天室里的用户 * * @author:wjm * @date:2020/6/23 22:41 */public class User { /** * 用户名字 */ private String nam
2020-07-25 21:08:56
164
原创 责任链模式Responsibility
一 概述其核心是为了处理某种连续的流程,并确保业务一定能走到相应的责任节点上并得到相应的处理;例如工作流:企事业单位中为了完成某项日常任务,通常要制定一些工作流程,按步骤拆分,并组织好各个环节中的逻辑关系及走向,这样才能更高效、更规范地完成任务;二 使用示例审批工作流:审批人的抽象:不同审批人的审批权限不同,审批的逻辑由其实现类实现,抽象类抽象不同角色的责任范围:自己只懂自己怎么审批(责任),自己处理不了的递交给上层(链条);package cn.http.test;/** * 抽
2020-07-24 11:18:17
262
原创 模板方法模式Template
一 概述模板方法的本质:面向对象,是对事物属性与行为的封装,方法,指的就是行为。模板方法,显而易见是说某个方法充当了模板的作用,其充分利用了抽象类虚实结合的特性:虚部抽象预留:即抽象类中的抽象方法;实部固定延续,也是模板方法模式的本质:即抽象类中的protected final method(),子类无法重写,以达到将某种固有行为延续至子类的目的;在jdk1.8后,接口中也可以存在default的方法,区别是default方法是可以被重写的,但接口的意义并不适合像抽象类虚实结合的特性,因此
2020-07-24 11:17:45
162
原创 命令模式Command
一 概述在介绍命令模式前,先回顾一下策略模式:在策略模式中,定义好策略后,策略需要绑定其策略的使用者,用户需通过策略使用者来调用策略的功能;在这种模式中,策略与策略的使用者是强绑定的,当策略使用者的需求变得复杂后,需要不断的修改原有策略来满足复杂的需求,这不符合设计模式开闭原则;命令模式:在发令者(策略使用者)与执行者(策略)中加入命令模块(不同的策略接口与不同的策略使用者接口绑定),而达到将策略与策略使用者***彻底解耦***的目的;二 使用示例定义策略;package cn.ht
2020-07-24 11:17:13
175
原创 解释器模式Interpreter
一 概述解释,其功能是对“语言”的拆解,例如将A语言解释成B语言,让B语言也能理解A语言;例如Java是人类可以理解的语言,当Java程序写好后要先进行编译生成字节码(class文件),然后对此文件解释成机器码,最终机器才可以理解并执行;二 使用示例先回顾一下组合模式,组合模式的本质,是抽象出共同的根属性(根节点),将功能抽象成由根节点产生不同的子节点,子节点又可以继续产生子节点,直到最终的“叶子”(二叉树结构),然后通过不同节点相互组合产生结果(例如文件夹功能),他强调的是节点与节点之间是像
2020-07-24 11:16:40
293
原创 观察者模式Observer
一 概述观察者模式(Observer),又叫发布-订阅模式(Publish/Subscribe),定义对象间一对多的依赖关系;每当一个对象改变状态,所有依赖于它的对象都会得到通知并进行相应的处理;二 使用示例package cn.http.test;import java.util.Vector;/** * 主题:管理观察者(实现新增、删除、通知操作) * * @author:wjm * @date:2020/6/28 21:06 */public class Subject
2020-07-24 11:16:12
154
原创 访问者模式Visitor
一 概述场景:通常来说,用于封装数据所用到的pojo类,其只包含get、set,对应的业务逻辑是在Service上完成的;但如果出现多个pojo类都共用一套逻辑时,则应该考虑将逻辑进行抽象,不同类型的pojo类使用不同的业务逻辑,这就是访问者模式:二 使用示例阅读笔记时,应先从产品(即main方法)出发,了解产物是如何运作的,从而反推设计;package cn.http.test;import java.util.Arrays;import java.util.List;/**
2020-07-24 11:15:33
111
原创 迭代器模式Iterator
一 概述迭代器就存在于常用的集合、数组中:把某一批类似的元素按某种数据结构集合起来作为一个整体来引用,比如List,Set,Map以及各种各样不同数据的表示实现;当要用到每个元素的时候,需要将元素一个个的取出来,但是对不同数据类型的访问方式各有不同,于是就需要定义统一的迭代器来标准化这种遍历行为;二 使用示例迭代器示例:行车记录仪;package cn.http.test;/** * 迭代器 * * @author:wjm * @date:2020/6/28 20:12 */
2020-07-24 11:14:47
108
原创 策略模式Strategy
一 概述目的:针对不同的场景,使用不同的策略解决问题;原则:不破坏原有的类,通过扩展原有类来达到扩展功能的目的;二 使用示例构造策略接口、策略接口实现加法类、策略接口实现减法类;package cn.http.test;/** * 策略 * * @author:wjm * @date:2020/6/16 18:26 */public interface Strategy { /** * 计算器 * * @param a 操作数
2020-07-24 11:14:10
103
原创 备忘录模式Memo
一 概述备忘录是一个抽象的概念,他应代表着记录了任何关于对象的行为、状态、时间线回滚、时间线前进等等的一切操作,如:回滚,倒退,载入历史,数据库恢复、游戏存盘载入、操作系统快照恢复、打开备份文档、手机恢复出厂设置等;二 使用示例使用备忘录模式,示例一个文档编辑器的时间线行为:保存撤销操作;package cn.http.test;/** * 实体类:一个文档 * * @author:wjm * @date:2020/6/28 21:07 */public class Doc
2020-07-24 11:13:27
237
原创 组合模式Combination
一 概述抽象理念:由于事物与事物之间存在某种关系,通过组织起来并形成某种结构并且可以共同发挥作用;组合模式本质:二叉树–根部分出来两个枝杈(左节点,右节点),每个枝杈上又可以继续分叉,直到末端的叶子为止:分形理论:不管是连绵的山川、飘浮的云朵、岩石的断裂口、树冠、花菜、还是人类的大脑皮层,把这些部分与整体以某种方式相似的形体呈现出来就称为分形;部分/整体的结构:从其中抽出任意一个“部分”,其与“整体”的结构是类似的,因此在“树”结构中,无论是根、枝、还是叶子,都可以将其抽象为“节点”,模糊
2020-07-24 11:12:41
319
原创 装饰器模式Decorator
一 概述装饰器:顾名思义为将某个对象,通过不同的装饰后,产出不同的结果;二 使用示例构造一个抽象装饰器、需要装饰的行为package cn.http.test;/** * 提供cooking的行为 * * @author:wjm * @date:2020/6/17 20:07 */public interface Cook { /** * 烹饪行为 */ void cooking();}package cn.http.test;/
2020-07-23 23:31:11
94
原创 享元模式Flyweight
一 概述享元,即共享元属性;在相似的对象中,抽象出可以共享(重复)的元属性,使用享元模式提高处理性能,减少不必要的开支;二 使用示例需求:定义一套绘图工具,使用该工具可以直接画出河流、石路、草坪、房子等;设计:由于工具画出的图案具有高度的相似性,例如多个河流、多个石路,因此提取绘制图案时,只需要加载一次图案类,就可以一直使用,而不是每一次提取都重新加载一次;在以上描述中,每一种图案类都是共享元属性,代码示例:package cn.http.test;/** * 绘图工具具有的能力
2020-07-23 23:30:39
108
1
原创 适配器模式Adapt
一 概述例子:墙上的插座为三孔接口,但是很多家电都是双孔标准,这个时候就需要一个适配器,让双孔的家电通过适配器后也可以接入三孔接口的插座;两种适配器类适配器对象适配器二 使用示例对象适配器package cn.http.test;/** * 三孔插座 * * @author:wjm * @date:2020/6/16 17:10 */public interface TriplePin { /** * 参数分别为火线live,零线null,地线
2020-07-23 23:30:06
256
原创 桥接模式Bridge
一 概述桥接模式,是把***抽象类*** 与 ***接口***连接起来,这两种对象可以拥有无数个继承、实现对象,这两种对象之间可以任意调换,产生不同的功能;二 使用示例被桥接的接口;package cn.http.test;/** * 形状,提供不同的形状功能 * * @author:wjm * @date:2020/7/1 00:12 */public interface Shape { /** * 创建形状 */ void create
2020-07-23 23:29:33
128
原创 门面模式Facade
一 概述门面就是一个大系统,里面封装了很多的子部件(或子系统),部件之间也许有复杂的逻辑关系,对于我们旁观者来说,直接使用这些子部件是非常麻烦的一件事情,所以门面就充当了一个包装类的角色,并且对外暴露一个接口,达到简化客户操作的目的,同时也是对客户端与子系统之间的解耦;平时的开发中,其实处处都是门面模式,与面向接口编程是差不多的,把具体逻辑封装,只对外暴露接口;二 类UML图源码地址:我的GitHub...
2020-07-23 23:29:00
131
原创 原型模式Prototype
一 概述新建一个标准化的word文档,这个过程其实是在实例化,称之为“零号”文件;当写好了文档后,把这个文件复制给其他公司员工去填写,则这个零号文件被称之为“原型”;原型模式,实际上是从原型实例复制克隆出新实例,而不是重新实例化类;二 使用示例原型类构造、深拷贝与浅拷贝package cn.http.test;/** * 原型类:敌机 * * @author:wjm * @date:2020/6/16 14:29 */public class EnemyPlane imp
2020-07-23 23:27:18
237
原创 建造者模式Builder
一 概述建造者模式:用于对复杂对象的建造,与工厂模式不同的是,建造者的目的在于把复杂构造过程从不同对象展现中抽离出来,使得同样的构造工序可以展现出不同的产品对象。二 使用示例2.1 包含指挥者,最终使用指挥者建造产品;由最终建造的产品、负责建造的角色、指挥具体如何建造的角色组成;package cn.http.test;/** * 产品:汽车 * * @author:wjm * @date:2020/7/1 22:52 */public class Car { /*
2020-07-23 23:26:39
82
原创 简单工厂模式与抽象工厂模式Factory
一 简单工厂模式1 概述工厂,顾名思义,是用来生产对象的,其好处是实现了类与类实例化之间的解耦,类实例化的过程可能是无比复杂的,当这种复杂实例化的类多起来之后,每次实例化都要重复的编写过程代码;有了工厂模式后,工厂隐藏了对象实例化的过程,用户只需通知工厂要生产的类,即可获得要生产的类;2 使用示例阅读笔记时,应先从产品(即main方法)出发,了解产物是如何运作的,从而反推设计;package cn.pattern.创建型.factory;import cn.pattern.创建型.fa
2020-07-23 23:23:35
107
原创 单例模式Singleton
一 概述单例模式应用广泛,故这里只介绍常见的四种单例运用二 使用示例单例模式一:package cn.xair.manager.handler;/** * 单例模式举例 * * @author:wjm * @date:2020/5/26 15:43 */public class TestSingleton { /** * 单例模式(痴汉式) * 建议直接用痴汉式即可,饿汉式、懒汉式在现在这个内存时代不需要考虑 */ public
2020-07-23 23:22:26
280
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人