自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 资源 (1)
  • 收藏
  • 关注

原创 23种设计模式java-访问者

模式概述:允许一个或者多个操作应用到一组对象上,解耦操作和对象本身使用场景:1.如果你需要对一个复杂对象结构 (例如对象树) 中的所有元素执行某些操作, 可使用访问者模式。2.可使用访问者模式来清理辅助行为的业务逻辑。3.当某个行为仅在类层次结构中的一些类中有意义, 而在其他类中没有意义时, 可使用该模式。代码样例:代码背景: 假如你有一家电子产品商店,销售手机、平板、笔记本;针对不同角色的人,你的折扣信息不同;你可能会想到在你的各个销售产品中,对于不同角色的人,加上if else 处理,但是

2021-07-16 13:55:59 81

原创 23种设计模式-java-解释器

模式概述:解释器模式为某个语言定义它的语法(或者叫文法)表示,并定义一个解释器用来处理这个语法。使用场景:只在一些特定的领域会被用到,比如编译器、规则引擎、正则表达式。代码样例:代码背景: 定义一个加减乘除的计算语言;表达式只有加、减、乘、除,且没有优先级;表达式前面是数字,后面是运算符,空格隔开;数字按照从左到右顺序,运算符按照从右到左顺序,取出两个数字和运算符进行计算,计算结果放入头部,循环此过程,直到只剩下一个数字,即为计算结果。比如”5 2 1 - +“;第一次计算,取出 5和2进行加法处

2021-07-15 21:07:42 65

原创 23种设计模式-java-模板方法

模式概述:它在超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。使用场景:当你只希望客户端扩展某个特定算法步骤, 而不是整个算法或其结构时, 可使用模板方法模式。当多个类的算法除一些细微不同之外几乎完全一样时, 你可使用该模式。 但其后果就是, 只要算法发生变化, 你就可能需要修改所有的类。代码样例:/** * 超类 */public abstract class SeekGirlTempplate { /** * 撩妹方法(一个模板方法)

2021-07-14 01:20:17 94

原创 23种设计模式-java-状态

模式概述:让你能在一个对象的内部状态变化时改变其行为, 使其看上去就像改变了自身所属的类一样。状态模式与有限状态机的概念紧密相关。使用场景:1.如果对象需要根据自身当前状态进行不同行为, 同时状态的数量非常多且与状态相关的代码会频繁变更的话, 可使用状态模式。2. 如果某个类需要根据成员变量的当前值改变自身行为, 从而需要使用大量的条件语句时, 可使用该模式。3. 当相似状态和基于条件的状态机转换中存在许多重复代码时, 可使用状态模式。、代码样例:/** * 彩灯 * * 背景:彩灯有两

2021-07-13 22:11:36 79

原创 23种设计模式-java-备忘录

模式概述:允许在不暴露对象实现细节的情况下保存和恢复对象之前的状态。使用场景:1.当你需要创建对象状态快照来恢复其之前的状态时, 可以使用备忘录模式。2.当直接访问对象的成员变量、 获取器或设置器将导致封装被突破时, 可以使用该模式。代码样例:/** * 编辑器 */public class Editor { StringBuilder text = new StringBuilder(); public String getText(){ return

2021-07-12 23:19:05 90

原创 23种设计模式-java-迭代器

模式概述:让你能在不暴露集合底层表现形式 (列表、 栈和树等) 的情况下遍历集合中所有的元素。使用场景:1.当集合背后为复杂的数据结构, 且你希望对客户端隐藏其复杂性时 (出于使用便利性或安全性的考虑), 可以使用迭代器模式。2. 使用该模式可以减少程序中重复的遍历代码。3. 如果你希望代码能够遍历不同的甚至是无法预知的数据结构, 可以使用迭代器模式。代码样例:/** * 迭代器接口 */public interface Iterator { boolean hasNext();

2021-07-11 23:36:00 110 2

原创 23种设计模式-java-命令

模式概述:它可将请求转换为一个包含与请求相关的所有信息的独立对象。 该转换让你能根据不同的请求将方法参数化、 延迟请求执行或将其放入队列中, 且能实现可撤销操作。使用场景:1.如果你需要通过操作来参数化对象, 可使用命令模式。2.如果你想要将操作放入队列中、 操作的执行或者远程执行操作, 可使用命令模式。3.如果你想要实现操作回滚功能, 可使用命令模式。代码样例:代码背景: 对文本编辑器的内容进行插入和删除一段文本等相关操作,通过命令模式来进行实现,并实现撤销功能。/** * 编辑器 *

2021-07-11 15:39:30 75

原创 23种设计模式-java-代理

模式概述:让你能够提供对象的替代品或其占位符。 代理控制着对于原对象的访问, 并允许在将请求提交给对象前后进行一些处理。使用场景:1.延迟初始化 (虚拟代理)。 如果你有一个偶尔使用的重量级服务对象, 一直保持该对象运行会消耗系统资源时, 可使用代理模式。2.访问控制 (保护代理)。 如果你只希望特定客户端使用服务对象, 这里的对象可以是操作系统中非常重要的部分, 而客户端则是各种已启动的程序 (包括恶意程序), 此时可使用代理模式。3.本地执行远程服务 (远程代理)。 适用于服务对象位于远程服务

2021-07-01 20:14:28 100

原创 23种设计模式-java-桥接

模式概述:可将一个大类或一系列紧密相关的类拆分为抽象和实现两个独立的层次结构, 从而能在开发时分别使用。使用场景:1.如果你想要拆分或重组一个具有多重功能的庞杂类 (例如能与多个数据库服务器进行交互的类), 可以使用桥接模式。2.如果你希望在几个独立维度上扩展一个类, 可使用该模式。3.如果你需要在运行时切换不同实现方法, 可使用桥接模式。代码样例:代码背景: 桥接模式有两种理解方式,一种是类有多个独立变化的维度,通过组合模式代替继承来实现各个维度的独立扩展;还有另外一种比较“纯正”的理解,即

2021-06-08 22:55:21 90

原创 23种设计模式-java-适配器

模式概述:它能使接口不兼容的对象能够相互合作。使用场景:当你希望使用某个类, 但是其接口与其他代码不兼容时, 可以使用适配器类。如果您需要复用这样一些类, 他们处于同一个继承体系, 并且他们又有了额外的一些共同的方法, 但是这些共同的方法不是所有在这一继承体系中的子类所具有的共性。代码样例:代码背景: 假如你公司有个人力系统可以查看员工的信息,系统底层用户是一张表,直接查询数据库得到用户详情,然后返回需要的信息即可;后来你们公司业务扩展,人力紧张,这时你们公司找了外包,同样你们想看外包人员的

2021-06-08 00:23:20 58

原创 23种设计模式-java-原型

模式概述:使你能够复制已有对象, 而又无需使代码依赖它们所属的类。使用场景:1.如果你需要复制一些对象, 同时又希望代码独立于这些对象所属的具体类, 可以使用原型模式。2.如果子类的区别仅在于其对象的初始化方式, 那么你可以使用该模式来减少子类的数量。 别人创建这些子类的目的可能是为了创建特定类型的对象。代码样例:/** * 用户 */public class UserInfo implements Cloneable{ public String name; publi

2021-06-07 20:44:57 59

原创 23种设计模式-java-生成器

模式概述:使你能够分步骤创建复杂对象。 该模式允许你使用相同的创建代码生成不同类型和形式的对象。使用场景:使用生成器模式可避免 “重叠构造函数 (telescopic constructor)” 的出现。当你希望使用代码创建不同形式的产品 (例如石头或木头房屋) 时, 可使用生成器模式。使用生成器构造组合树或其他复杂对象。代码样例:代码背景: 假设你要创建一个Person对象,该对象有几十上百的属性,但你的意愿创建的对象可能并不需要其中的很多属性,构造函数会传入很多null;对于构造函数的

2021-06-07 17:34:13 92

原创 23种设计模式-java-享元

模式概述:它摒弃了在每个对象中保存所有数据的方式, 通过共享多个对象所共有的相同状态, 让你能在有限的内存容量中载入更多对象。使用场景:1.仅在程序必须支持大量对象且没有足够的内存容量时使用享元模式。代码样例:代码背景: 下围棋,棋手每走一步,需要创建一个棋子对象;这些大量对象非常相似;其中坐标(外在状态)是每个棋子都不相同的;样式(内在状态),如颜色、形状、大小基本都是相同重复的。使用享元模式解决每创建一个棋子就创建一个对应样式而造成浪费资源的问题(大量重复对象)。把样式对象进行共享。/**

2021-06-07 16:14:17 59

原创 23种设计模式-java-组合模式

模式概述:你可以使用它将对象组合成树状结构, 并且能像使用独立对象一样使用它们。使用场景:1.如果你需要实现树状对象结构, 可以使用组合模式。2.如果你希望客户端代码以相同方式处理简单和复杂元素, 可以使用该模式。代码样例:代码背景: 组合模式主要是用于解决树状结构;以下代码是模拟买水果的场景,每种水果是叶子节点(简单元素);水果需要袋子包装,使用袋子包装好水果的组合是复杂元素,一些包装好水果的袋子可能和其他水果或者袋子又被大的袋子再次包装。/** * 抽象产品元素 */public a

2021-06-06 23:26:51 112

原创 23种设计模式-java-责任链

模式概述:允许你将请求沿着处理者链进行发送。 收到请求后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者。使用场景:1.当程序需要使用不同方式处理不同种类请求, 而且请求类型和顺序预先未知时, 可以使用责任链模式。2.当必须按顺序执行多个处理者时, 可以使用该模式。3.如果所需处理者及其顺序必须在运行时进行改变, 可以使用责任链模式。代码样例:代码背景: 公司的员工申请岗位晋升,公司设置对应的考核面试;对于中级职位需要依次考核h5、js技能;对应高级职位需要依次考核h5、js、

2021-06-03 00:55:21 202

原创 23种设计模式-java-装饰者

模式概念:允许你通过将对象放入包含行为的特殊封装对象中来为原对象绑定新的行为。使用场景:1.如果你希望在无需修改代码的情况下即可使用对象, 且希望在运行时为对象新增额外的行为, 可以使用装饰模式。2.如果用继承来扩展对象行为的方案难以实现或者根本不可行, 你可以使用该模式。代码样例代码背景: 装饰者模式主要是使用聚合方式对方法进行增强,比如有个通知系统在发生重要事情的给你发送告知信息,一开始是发送邮件,后来你想在发送邮件的同时通过QQ也发送一条消息,另一个人希望在发送邮件的同时通过微信也发送一条

2021-06-02 17:02:37 112

原创 23种设计模式-java-观察者

模式概述:允许你定义一种订阅机制, 可在对象事件发生时通知多个 “观察” 该对象的其他对象。使用场景:当一个对象状态的改变需要改变其他对象, 或实际对象是事先未知的或动态变化的时, 可使用观察者模式。当应用中的一些对象必须观察其他对象时, 可使用该模式。 但仅能在有限时间内或特定情况下使用。代码样例:代码背景: 张三、李四、王五都想买最新版的华为手机,每天都跑到华为营业厅看是否上架,如果未上架,他们都要空手而归;换种思路,营业厅可以向所有顾客发送邮件,这样,部门顾客就无须前往营业厅了,但是会

2021-06-02 01:15:17 181

原创 23种设计模式-java-中介者

模式概述让你减少对象之间混乱无序的依赖关系。 该模式会限制对象之间的直接交互, 迫使它们通过一个中介者对象进行合作。使用场景1.当一些对象和其他对象紧密耦合以致难以对其进行修改时, 可使用中介者模式。2.当组件因过于依赖其他组件而无法在不同应用中复用时, 可使用中介者模式。3.如果为了能在不同情景下复用一些基本行为, 导致你需要被迫创建大量组件子类时, 可使用中介者模式。代码样例代码背景: 一个公司,有研发、行政、财务、市场、后勤等部门;比如发工资,需要财务部门给每个部门发,那么需要在财务部门

2021-05-30 22:56:24 91

原创 23种设计模式-java-外观模式

模式概述:能为程序库、 框架或其他复杂类提供一个简单的接口。要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。提供一个高层次的接口,使得子系统更易于使用。使用场景:1.如果你需要一个指向复杂子系统的直接接口, 且该接口的功能有限, 则可以使用外观模式。2. 如果需要将子系统组织为多层结构, 可以使用外观。代码样例:代码背景: 一个幼儿培训班营销模块进行生成营销策略,具体的营销策略生成是根据child的电话号码查询用户关系表得到child的身份证号,然后根据身份证号查询child的详细

2021-05-27 00:45:06 82

原创 23种设计模式-java-抽象工厂

模式概述:能创建一系列相关的对象, 而无需指定其具体类。使用场景:1.如果代码需要与多个不同系列的相关产品交互, 但是由于无法提前获取相关信息, 或者出于对未来扩展性的考虑, 你不希望代码基于产品的具体类进行构建, 在这种情况下, 你可以使用抽象工厂。2.如果你有一个基于一组抽象方法的类, 且其主要功能因此变得不明确, 那么在这种情况下可以考虑使用抽象工厂模式。代码样例:/** * 食物基类(产品A) */public abstract class Food { public St

2021-05-26 00:34:25 135 1

原创 23种设计模式-java-工厂方法

模式概述:在父类中提供一个创建对象的方法, 允许子类决定实例化对象的类型。使用场景:1.当你在编写代码的过程中, 如果无法预知对象确切类别及其依赖关系时, 可使用工厂方法。2.如果你希望用户能扩展你软件库或框架的内部组件, 可使用工厂方法。3.如果你希望复用现有对象来节省系统资源, 而不是每次都重新创建对象, 可使用工厂方法。代码样例:/** * 产品基类 */public interface Product { public void excute();}public c

2021-05-25 23:23:07 85

原创 23种设计模式-java-策略模式

模式概述:能让你定义一系列算法, 并将每种算法分别放入独立的类中, 以使算法的对象能够相互替换。使用场景:1.当你想使用对象中各种不同的算法变体, 并希望能在运行时切换算法时, 可使用策略模式。2.当你有许多仅在执行某些行为时略有不同的相似类时, 可使用策略模式。3.如果算法在上下文的逻辑中不是特别重要, 使用该模式能将类的业务逻辑与其算法实现细节隔离开来。4.当类中使用了复杂条件运算符以在同一算法的不同变体中切换时, 可使用该模式。代码样例:代码背景: 在地图上输入起点和终点=点,生成导航

2021-05-25 00:04:07 109

原创 23种设计模式-java-单例模式

模式概述:能够保证一个类只有一个实例, 并提供一个访问该实例的全局节点。使用场景1.如果程序中的某个类对于所有客户端只有一个可用的实例, 可以使用单例模式。2.如果你需要更加严格地控制全局变量, 可以使用单例模式。代码样例a.饿汉模式/** * 单例模式-饿汉 * 类加载之后就会进行实例化,无论应用是否使用都会进行实例化,线程安全 */public class Singleton { private static final Singleton INSTANCE = new S

2021-05-23 23:27:54 72

原创 23种设计模式-java-目录

设计模式清单图标设计模式名称设计模式名称设计模式链接类型工厂方法Factory Method后续补充创建型抽象工厂Abstract Factory后续补充创建型生成器Builder后续补充创建型原型Prototype后续补充创建型单例Singleton后续补充创建型适配器Adapter后续补充结构型桥接Bridge后续补充结构型外观Facade后续补充结构型组合Co

2021-05-23 22:27:44 146

原创 java对象比较“==”与“equals()”详解

文章目录写在前面== 与 equals() 是两个实例对象的什么进行比较?equals()的覆盖,必然伴随着hashCode的覆盖,为什么?写在前面本文的书写仅是个人的理解,目的加深对技术点的理解,知识积累,记录足迹;难免存在疏漏与错误的地方,在此欢迎各位能人异士进行指导与纠正;如果能帮到你,是我的荣幸。== 与 equals() 是两个实例对象的什么进行比较?1、== 是拿两个对象的地址进行比较;对于Java中的基本数据类型比较的即是数值是否相等;对于Java中的引用类型比较的是内存地址是否相等

2021-04-01 17:56:37 2572

设计模式-java实现代码样例

设计模式-java实现代码样例

2021-08-08

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除