![](https://img-blog.csdnimg.cn/20190918140213434.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
设计模式与开发规范
文章平均质量分 95
设计模式与开发规范
秃了也弱了。
即使没有万全准备,也要勇敢迈出第一步。无论远方的风雨有多大、路有多难走。风里雨里陪伴你们,赠人玫瑰,手有余香。在技术领域,我会一如既往的坚持下去。
展开
-
写出优美的代码:考虑使用静态工厂方法替代构造方法
虽然静态工厂方法有诸多优点,但是要结合实际应用场景。如果只有静态工厂方法而没有公共或受保护构造方法,这将导致该类无法提供子类。例如,在 Collections框架中不可能将任何方便实现类子类化。可以说,这可能是因祸得福,因为它鼓励程序员使用组合而不是继承,并且是不可变类型(final)。另外,静态工厂方法在API文档上,和普通静态方法混杂在一起,因此要想区分静态工厂方法和普通静态方法,或许要花费一定的精力。所以,静态工厂方法的命名很有讲究(参考本文静态工厂方法的命名)。原创 2023-11-03 10:13:01 · 308 阅读 · 0 评论 -
熟读《阿里巴巴java开发手册》(五、 MySQL 数据库)
目录(一) 建表规约(二) 索引规约(三) SQL 语句(四) ORM 映射(一) 建表规约1. 【强制】 表达是与否概念的字段,必须使用 is_xxx 的方式命名,数据类型是 unsigned tinyint( 1 表示是, 0 表示否)。说明: 任何字段如果为非负数,必须是 unsigned。注意: POJO 类中的任何布尔类型的变量,都不要加 is 前缀,所以,需要在<resultMap>设置从 is_xxx到 Xxx 的映射关系。数据库表示是与否的值,使用 t原创 2021-03-15 17:20:09 · 1872 阅读 · 0 评论 -
熟读《阿里巴巴java开发手册》(二、异常日志)
目录(一) 异常处理(二) 日志规约(一) 异常处理1. 【强制】 Java 类库中定义的可以通过预检查方式规避的 RuntimeException 异常不应该通过 catch 的方式来处理,比如: NullPointerException, IndexOutOfBoundsException 等等。说明: 无法通过预检查的异常除外,比如,在解析字符串形式的数字时, 可能存在数字格式错误, 不得不通过 catch NumberFormatException 来实现。正例: if (ob原创 2021-03-12 17:14:12 · 1845 阅读 · 0 评论 -
熟读《阿里巴巴java开发手册》(一、编程规约)
目录(一) 命名风格(二) 常量定义(三) 代码格式(四) OOP 规约(五) 集合处理(六) 并发处理(七) 控制语句(八) 注释规约(九) 其它(一) 命名风格1. 【强制】 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。反例: _name / __name / $name / name_ / name$ / name__2. 【强制】 代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。说明: 正确的英文原创 2021-03-12 17:06:25 · 1903 阅读 · 0 评论 -
熟读《阿里巴巴java开发手册》(六、工程结构,七、 设计规约,专有名词解释)
目录六、工程结构(一) 应用分层(二) 二方库依赖(三) 服务器七、 设计规约附 2: 专有名词解释六、工程结构(一) 应用分层1. 【推荐】 图中默认上层依赖于下层,箭头关系表示可直接依赖,如:开放接口层可以依赖于Web 层,也可以直接依赖于 Service 层,依此类推:• 开放接口层:可直接封装 Service 方法暴露成 RPC 接口;通过 Web 封装成 http 接口; 进行网关安全控制、 流量控制等。• 终端显示层:各个端的模板渲染并执行显示的层。原创 2021-03-15 17:36:03 · 1920 阅读 · 0 评论 -
熟读《阿里巴巴java开发手册》(三、单元测试,四、安全规约)
目录三、单元测试四、安全规约三、单元测试1. 【强制】 好的单元测试必须遵守 AIR 原则。说明: 单元测试在线上运行时,感觉像空气( AIR)一样并不存在,但在测试质量的保障上,却是非常关键的。好的单元测试宏观上来说,具有自动化、独立性、可重复执行的特点。⚫ A: Automatic(自动化)⚫ I: Independent(独立性)⚫ R: Repeatable(可重复)2. 【强制】 单元测试应该是全自动执行的,并且非交互式的。测试用例通常是被定期执行的,执行过程必须完全自原创 2021-03-12 17:22:23 · 1902 阅读 · 0 评论 -
设计模式之【解释器模式】,用语言定义一门语言
解释器模式(Interpreter Pattern)是指给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。是一种按照规定的语法(文法)进行解析的模式,属于行为型模式。就比如编译器可以将源码编译解释为机器码,让CPU能进行识别并运行。解释器模式的作用其实与编译器一样,都是将一些固定的文法(即语法)进行解释,构建出一个解释句子的解释器。原创 2023-05-24 09:56:57 · 822 阅读 · 0 评论 -
设计模式之【责任链模式】,路铺好了,你走不走?
责任链模式(Chain of Responsibility Patter)也称职责链模式,是将链中每一个节点看做是一个对象,每个节点处理的请求均不同,且内部自动维护一个下一节点对象。当一个请求从链式的首端发出时,会沿着链的路径依次传递给每一个节点对象,直至有对象处理这个请求为止。责任链模式属于行为型模式。原创 2023-05-24 08:45:42 · 696 阅读 · 1 评论 -
设计模式之【策略模式】,去掉繁琐的if-else,实现算法的动态替换
策略模式(Strategy Pattern)又叫政策模式(Policy Pattern),它是将定义的算法家族分别封装起来,让它们之间可以互相替换,从而让算法的变化不会影响到使用算法的用户。属于行为型模式。策略模式使用的就是面向对象的继承和多态机制,从而实现同一行为在不同场景下具备不同实现。原创 2023-05-23 15:37:43 · 4381 阅读 · 4 评论 -
设计模式之【状态模式】,如何设计一个“状态管理大师”
状态模式(State Pattern)也称为状态机模式(State Machine Pattern),是允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类,属于行为型模式。状态模式中类的行为是由状态决定的,不同的状态下有不同的行为。其意图是让一个对象在其内部改变的时候,其行为也随之改变。状态模式核心是状态与行为绑定,不同的状态对应不同的行为。原创 2023-05-23 10:47:21 · 870 阅读 · 0 评论 -
设计模式之【备忘录模式】,“后悔药”是可以有的
备忘录模式(Memento Pattern)又称为快照模式(Snapshot Pattern)或令牌模式(Token Pattern),是指在不破坏封装的前提下,捕获一个对象的内部状态,并在对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态,属于行为型模式。在软件系统中,备忘录模式可以为我们提供一种“后悔药”的机制,它通过存储系统各个历史状态的快照,使得我们可以在任一时刻将系统回滚到某一个历史状态。备忘录模式本质是从发起人实体类(Originator)隔离存储功能,降低实体类的职责。原创 2023-05-22 17:21:06 · 1206 阅读 · 0 评论 -
设计模式之【中介者模式】,多对多关系降级为一对多关系的利器
中介者模式(Mediator Pattern)又称为调节者模式或调停者模式。用一个中介对象封装一系列的对象交互,中介者使各对象不需要显式的相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互,属于行为型模式。中介者模式的核心思想是,通过中介者解耦系统各层次对象的直接耦合,层次对象的对外依赖通信统统交由中介者转发。原创 2023-05-22 15:30:14 · 2293 阅读 · 0 评论 -
设计模式之【观察者模式】,MQ的单机实现雏形
观察者模式(Observer Pattern),又叫发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。定义一种一对多的依赖关系,一个主题对象可被多个观察者对象同时监听,使得每当主题对象状态变化时,所有依赖于它的对象都会得到通知并被自动更新。属于行为型模式。原创 2023-05-22 10:51:37 · 1384 阅读 · 0 评论 -
设计模式之【迭代器模式】,对集合访问的统一
迭代器模式(Iterator Pattern)又称为游标模式(Cursor Pattern),它提供一种顺序访问集合/容器对象元素的方法,而又无需暴露集合内部表示。迭代器模式可以为不同的容器提供一致的遍历行为,而不用关心容器内容元素组成结构,属于行为型模式。迭代器模式的本质是抽离集合对象迭代行为到迭代器中,提供一致访问接口。原创 2023-05-19 13:22:28 · 1046 阅读 · 1 评论 -
全网最全最细的【设计模式】总目录,收藏起来慢慢啃,看完不懂砍我
设计原则之【单一职责原则】设计原则之【接口隔离原则】,我只做我能做的事设计原则之【依赖反转原则】依赖反转、控制反转、依赖注入,都是什么意思?设计原则之【里氏替换原则】设计原则之【开闭原则】设计原则之【迪米特法则】,非礼勿近重新认识面向对象——Java写了五年,你真的弄明白什么是面向对象了吗?不,你一直都是在面向过程编程什么是继承?什么是组合?为何说要多用组合少用继承?UML类图使用介绍设计模式之【单例模式】全解,单例模式实现方式,暴力打破单例模式与解决方案,你真的认识单例模式吗?设计模式之【原型模式】,深原创 2023-05-18 10:12:07 · 1416 阅读 · 0 评论 -
设计模式之【访问者模式】,动态双分派的魅力
访问者模式(Visitor Pattern)是一种将数据结构与数据操作分离的设计模式。是指封装一些作用于某种数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。属于行为型模式。访问者模式被称为最复杂的设计模式,并且使用频率不高,设计模式的作者也评价为:大多数情况下,你不需要使用访问者模式,但是一旦需要使用它时,那就真的需要使用了。访问者模式的基本思想是,针对系统中拥有固定类型数量的对象结构(元素),在其内提供一个accept()方法来接收访问者对象的访问。原创 2023-05-18 10:10:57 · 1334 阅读 · 1 评论 -
设计模式之【命令模式】,方法调用的花式玩法
命令模式(Command Pattern)是对命令的封装,每一个命令都是一个操作:请求的一方发出请求要求执行一个操作;接收的一方收到请求,并执行操作。命令模式解耦了请求方和接收方,请求方只需请求执行命令,不用关心命令是怎样被接受,怎样被操作以及是否被执行等。命令模式属于行为型模式。原文:将一个请求封装成医德对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。在软件系统中,行为请求者与行为实现者通常是一种紧耦合关系,因为这样的实现简单明了。原创 2023-05-17 10:02:51 · 2975 阅读 · 0 评论 -
设计模式之【模板方法模式】,模板方法和函数式回调,哪个才是趋势?
模板方法模式(Template Method Pattern)又叫模板模式,是指定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤,属于行为型设计模式。模板方法模式实际上是封装了一个固定流程,该流程由几个步骤组成,具体步骤可以由子类进行不同实现,从而让固定的流程产生不同的结果。它非常简单,其实就是类的继承机制,但它却是一个应用非常广泛的模式。目标方法模式的本质是抽象封装流程,具体进行实现。原创 2023-05-16 11:37:01 · 630 阅读 · 0 评论 -
设计模式之【代理模式】,有事找我“经纪人”
代理模式(Proxy Pattern)是指为其他对象提供一种代理,以控制对这个对象的访问,属于结构型模式。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。Java中的代理按照代理类生成时机不同又分为静态代理和动态代理。静态代理代理类在编译期就生成,而动态代理代理类则是在Java运行时动态生成。动态代理又有JDK代理和CGLib代理两种。原创 2023-05-15 17:36:38 · 1151 阅读 · 0 评论 -
设计模式之【享元模式】,共享单车火起来并不是没有原因的
享元模式(Flyweight Pattern)也叫蝇量模式,又称为轻量级模式,是对象池的一种实现。类似于线程池,线程池可以避免不停的创建和销毁多个对象,消耗性能。提供了减少对象数量从而改善应用所需的对象结构的方式。其宗旨是共享细粒度对象,将多个对象的访问集中起来,不比为每个访问者创建一个单独的对象,以此来降低内存的消耗,属于结构型模式。面向对象技术可以很好地解决一些灵活性或可扩展性问题,但在很多情况下需要在系统中增加类和对象的个数。当对象数量太多时,将导致运行代价过高,带来性能下降等问题。原创 2023-05-15 11:04:07 · 623 阅读 · 0 评论 -
设计模式之【外观/门面模式】,不打开这扇门永远不知道门后有多少东西
外观模式也叫门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。其主要特征是定义了一个高层接口,让子系统更容易使用,属于结构型模式。外观(Facade)模式是“迪米特法则”的典型应用。原创 2023-05-12 17:51:47 · 805 阅读 · 0 评论 -
设计模式之【组合模式】,树形结构的完美解决方案
组合模式(Composite Pattern)也称为整体-部分(Part-Whole)模式,它的宗旨是通过将单个对象(叶子节点)和组合对象(树枝节点)用相同的接口进行表示,使得客户对单个对象和组合对象的使用具有一致性,属于结构型模式。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。GOF24原文:将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。组合模式的设计思路,与其说是一种设计模式,倒不如说是对业务场景的一种数据结构和算法的抽象。原创 2023-05-11 14:33:24 · 1229 阅读 · 0 评论 -
设计模式之【装饰者模式】,实现“穿衣打扮”自由原来这么简单
装饰者模式(Decorator Pattern),也称为包装模式(Wrapper Pattern)、装饰器模式,是指在不改变原有对象的基础之上,将功能附加到对象上,提供了比继承更有弹性的替代方案(扩展原有对象的功能),属于结构型模式。在 GoF 的《设计模式》一书中,对装饰者模式是这样理解的:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰者模式相比生成子类更灵活。装饰者模式的核心是扩展功能。使用装饰者模式可以透明且动态地扩展类的功能。装饰器模式主要解决。原创 2023-05-10 11:54:00 · 1286 阅读 · 0 评论 -
设计模式之【桥接模式】,多用组合少用继承
桥接模式(Bridge Pattern)也称为桥梁模式、接口(Interface)模式或柄体(Handle and Body)模式,是将抽象部分与它的具体实现部分分离,使它们都可以独立地变化,属于结构型模式。在 GoF 的《设计模式》一书中,桥接模式是这么定义的:“Decouple an abstraction from its implementation so that the two can vary independently。”翻译成中文就是:“将抽象和实现解耦,让它们可以独立变化。原创 2023-05-09 16:11:58 · 1048 阅读 · 0 评论 -
设计模式之【适配器模式】,两个人之间确实需要月老的搭线~
适配器模式(Adapter Design Pattern)又叫变压器模式,这个模式就是用来做适配的,它将不兼容的接口转换为可兼容的接口,让原本由于接口不兼容而不能一起工作的类可以一起工作。属于结构型设计模式。也就是说,当前系统存在两种接口A和B,客户只支持访问A接口,但是当前系统没有A接口对象,但是有B接口对象,但客户无法识别B接口,因此需要通过一个适配器C,将B接口内容转换成A接口,从而使客户能够从A接口获取得到B接口内容。在软件开发中,基本上任何问题都可以通过增加一个中间层进行解决。原创 2023-05-09 11:31:21 · 849 阅读 · 0 评论 -
设计模式之【工厂模式】,创建对象原来有这么多玩法
简单工厂、工厂方法和抽象工厂。不过,在 GoF 的《设计模式》一书中,它将简单工厂模式看作是工厂方法模式的一种特例,所以工厂模式只被分成了工厂方法和抽象工厂两类。在这三种细分的工厂模式中,简单工厂、工厂方法原理比较简单,在实际的项目中也比较常用。而抽象工厂的原理稍微复杂点,在实际的项目中相对也不常用。原创 2023-05-08 22:29:41 · 1243 阅读 · 2 评论 -
设计原则之【迪米特法则】,非礼勿近
迪米特原则(Law of Demeter LoD)是指一个对象应该对其他对象保持最少的了解,又叫最少知道原则(Least Knowledge Principle,LKP),尽量降低类与类之间的耦合。迪米特原则主要强调只和朋友交流,不和陌生人说话。出现在成员变量、方法的输入、输出参数中的类都可以称之为成员朋友类,而出现在方法体内部的类不属于朋友类。其含义是:如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。原创 2023-05-08 19:07:04 · 2552 阅读 · 0 评论 -
设计原则之【接口隔离原则】,我只做我能做的事
接口隔离原则(Interface Segregation Principle, ISP)是指用多个专门的接口,而不使用单一的总接口,客户端不应该依赖它不需要的接口。这个原则指导我们在设计接口时应当注意一下几点:1、一个类对一类的依赖应该建立在最小的接口之上。2、建立单一接口,不要建立庞大臃肿的接口。3、尽量细化接口,接口中的方法尽量少(不是越少越好,一定要适度)。理解“接口隔离原则”的重点是理解其中的“接口”二字。这里有三种不同的理解。原创 2023-05-08 17:46:46 · 629 阅读 · 0 评论 -
UML类图使用介绍
统一建模语言(Unified Modeling Language,UML)是用来设计软件的可视化建模语言。它的特点是简单、统一、图形化、能表达软件设计中的动态与静态信息。UML 从目标系统的不同角度出发,定义了用例图、类图、对象图、状态图、活动图、时序图、协作图、构件图、部署图等 9 种图。类图(Class diagram)是显示了模型的静态结构,特别是模型中存在的类、类的内部结构以及它们与其他类的关系等。类图不显示暂时性的信息。类图是面向对象建模的主要组成部分。原创 2023-05-08 13:49:45 · 1558 阅读 · 0 评论 -
设计模式之【原型模式】,深入理解深拷贝与浅拷贝
原型模式: 用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型对象相同的新对象。对于熟悉 JavaScript 语言的前端程序员来说,原型模式是一种比较常用的开发模式。这是因为,有别于 Java、C++ 等基于类的面向对象编程语言,JavaScript 是一种基于原型的面向对象编程语言。即便 JavaScript 现在也引入了类的概念,但它也只是基于原型的语法糖而已。不过,如果你熟悉的是 Java、C++ 等这些编程语言,那在实际的开发中,就很少用到原型模式了。原创 2022-12-16 08:32:02 · 769 阅读 · 0 评论 -
设计模式之【建造者模式】使用java建造者模式优雅创建对象
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。Builder模式是一步一步创建一个复杂对象的创建型模式,它允许使用者在不知道内部建造细节的情况下,可以更精细的控制对象的构造流程。该模式是为了将构建复杂对象的过程和它的部件解耦,是的构建过程和不见得表示隔离开来。原创 2022-11-10 18:36:32 · 947 阅读 · 0 评论 -
设计模式之【单例模式】全解,单例模式实现方式,暴力打破单例模式与解决方案,你真的认识单例模式吗?
单例设计模式(Singleton Design Pattern)理解起来非常简单。一个类只允许创建一个对象(或者实例),那这个类就是一个单例类,这种设计模式就叫作单例设计模式,简称单例模式。单例模式中的“单例”概念其实有些笼统,很多博文中只介绍了一个进程内单例模式。其实单例模式有很多种,线程单例、进程单例、还是集群单例?接下来咱们一起来学习学习吧~原创 2022-11-02 21:15:00 · 763 阅读 · 0 评论 -
设计原则之【依赖反转原则】依赖反转、控制反转、依赖注入,都是什么意思?
这里所说的“控制”指的是对程序执行流程的控制,而“反转”指的是在没有使用框架之前,程序员自己控制整个程序的执行。实际上,这条原则主要还是用来指导框架层面的设计,跟前面讲到的控制反转类似。实际上,实现控制反转的方法有很多,除了刚才例子中所示的类似于模板设计模式的方法之外,还有马上要讲到的依赖注入等方法,所以,控制反转并不是一种具体的实现技巧,而是一个比较笼统的设计思想,一般用来指导框架层面的设计。这里的“控制”指的是对程序执行流程的控制,而“反转”指的是在没有使用框架之前,程序员自己控制整个程序的执行。原创 2022-11-01 21:15:00 · 2434 阅读 · 0 评论 -
设计原则之【里氏替换原则】
子类对象(object of subtype/derived class)能够替换程序(program)中父类对象(object of base/parent class)出现的任何地方,并且保证原来程序的逻辑行为(behavior)不变及正确性不被破坏。实现多态的条件:1.继承:必须要有子类继承父类的继承关系。2.重写:子类需要对父类中的一些方法进行重写,然后调用方法时就会调用子类重写的方法而不是原本父类的方法。3.向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类原创 2022-11-01 08:36:16 · 849 阅读 · 0 评论 -
设计原则之【开闭原则】
开闭原则的英文全称是 Open Closed Principle,简写为 OCP。它的英文描述是:software entities (modules, classes, functions, etc.) should be open for extension , but closed for modification。我们把它翻译成中文就是:软件实体(模块、类、方法等)应该“对扩展开放、对修改关闭”。原创 2022-10-31 13:07:03 · 476 阅读 · 0 评论 -
设计原则之【单一职责原则】
单一职责原则的英文是 Single Responsibility Principle,缩写为 SRP。这个原则的英文描述是这样的:A class or module should have a single responsibility。如果我们把它翻译成中文,那就是:一个类或者模块只负责完成一个职责(或者功能)。一个类只负责完成一个职责或者功能。也就是说,不要设计大而全的类,要设计粒度小、功能单一的类。原创 2022-10-31 09:16:12 · 691 阅读 · 0 评论 -
重新认识面向对象——Java写了五年,你真的弄明白什么是面向对象了吗?不,你一直都是在面向过程编程
面向过程”(Procedure Oriented,简称PO)是一种以过程为中心的编程思想。其原理就是将问题分解成一个一个详细的步骤,然后通过函数实现每一个步骤,并依次调用。面向过程,其实核心就是“过程”两个字。过程指的是解决问题的步骤,即先干什么、后干什么、再干什么、然后干什么……面向过程编程是一种编程范式或编程风格。它以过程(可以理解为方法、函数、操作)作为组织代码的基本单元,以数据(可以理解为成员变量、属性)与方法相分离为最主要的特点。原创 2022-10-29 06:45:00 · 1601 阅读 · 0 评论 -
什么是继承?什么是组合?为何说要多用组合少用继承?
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。/*** 动物System . out . println("呼气...吸气...");} } /*** 飞行动物* 继承,可以获得父类属性和方法System . out . println("飞行...");} }组合是通过对现有对象进行拼装即组合产生新的具有更复杂的功能。/*** 动物。原创 2022-10-28 23:00:00 · 3281 阅读 · 0 评论