【设计模式GOF】
文章平均质量分 89
设计模式从入门到放弃
小小工匠
show me the code ,change the world
展开
-
设计模式 - 结构型模式_代理模式
代理模式有点像⽼⼤和⼩弟,也有点像分销商。主要解决的是问题是为某些资源的访问、对象的类的易⽤操作上提供⽅便使⽤的代理服务。⽽这种设计思想的模式经常会出现在我们的系统中,或者你⽤到过的组件中,它们都提供给你⼀种⾮常简单易⽤的⽅式控制原本你需要编写很多代码的进⾏使⽤的服务类。类似这样的场景还有“”你的数据库访问层⾯经常会提供⼀个较为基础的应⽤,以此来减少应⽤服务扩容时不⾄于数据库连接数暴增。原创 2023-02-05 23:06:07 · 24776 阅读 · 2 评论 -
设计模式 - 结构型模式_享元模式
享元模式,主要在于共享通⽤对象,减少内存的使⽤,提升系统的访问效率。⽽这部分共享对象通常⽐较耗费内存或者需要查询⼤量接⼝或者使⽤数据库资源,因此统⼀抽离作为共享对象使⽤。另外享元模式可以分为在服务端和客户端.⼀般互联⽹H5和Web场景下⼤部分数据都需要服务端进⾏处理,⽐如数据库连接池的使⽤、多线程线程池的使⽤,除了这些功能外,还有些需要服务端进⾏包装后的处理下发给客户端,因为服务端需要做享元处理。但在⼀些游戏场景下,很多都是客户端需要进⾏渲染地图效果,⽐如;原创 2023-02-05 11:54:10 · 24719 阅读 · 1 评论 -
设计模式 - 结构型模式_外观模式
设计模式是解决程序中不合理、不易于扩展、不易于维护的问题,也是⼲掉⼤部分 ifelse 的利器,在我们常⽤的框架中基本都会⽤到⼤量的设计模式来构建组件,这样也能⽅便框架的升级和功能的扩展。但如果不能合理的设计以及乱⽤设计模式,会导致整个编程变得更加复杂难维护,也就是我们常说的: 反设计 、 过渡设计。⽽这部分设计能⼒也是从实践的项⽬中获取的经验,不断的改造优化摸索出的最合理的⽅式,应对当前的服务体量。外观模式也叫⻔⾯模式,主要解决的是降低调⽤⽅的使⽤接⼝的复杂逻辑组合。原创 2023-02-05 00:57:06 · 25368 阅读 · 0 评论 -
设计模式 - 结构型模式_装饰器模式
装饰器的核⼼就是再不改原有类的基础上给类新增功能。不改变原有类,大家会想到继承、AOP切⾯,当然这些⽅式都可以实现,但是使⽤装饰器模式会是另外⼀种思路更为灵活,可以避免继承导致的⼦类过多,也可以避免AOP带来的复杂性。很多场景⽤到装饰器模式字节流、字符流、⽂件流的内容时都⻅到了这样的代码,⼀层嵌套⼀层,⼀层嵌套⼀层,字节流转字符流等等,⽽这样⽅式的使⽤就是装饰器模式的⼀种体现。原创 2023-02-04 20:15:00 · 25218 阅读 · 1 评论 -
设计模式 - 结构型模式_桥接模式
桥接模式的主要作⽤就是通过将抽象部分与实现部分分离,把多种可匹配的使⽤进⾏组合。说⽩了核⼼实现也就是在A类中含有B类接⼝,通过构造函数传递B类的实现,这个B类就是设计的 桥。那么这样的桥接模式,在我们平常的开发中有哪些场景呢?JDBC多种驱动程序的实现、同品牌类型的台式机和笔记本平板、业务实现中的多类接⼝同组过滤服务等。这些场景都⽐较适合使⽤桥接模式进⾏实现,因为在⼀些组合中如果有如果每⼀个类都实现不同的服务可能会出现笛卡尔积,⽽使⽤桥接模式就可以⾮常简单。原创 2023-01-31 20:45:00 · 25340 阅读 · 0 评论 -
设计模式 - 结构型模式_适配器模式
适配器模式的主要作⽤就是把原本不兼容的接⼝,通过适配修改做到统⼀。使得⽤户⽅便使⽤,就像我们提到转换头、出国旅游买个插座等等,都是为了适配各种不同的口 ,做的兼容。在业务开发中我们会经常的需要做不同接⼝的兼容,尤其是中台服务,中台需要把各个业务线的各种类型服务做统⼀包装,再对外提供接⼝进⾏使⽤。⽽这在平常的开发中也是⾮常常⻅的。原创 2023-01-29 23:58:30 · 25659 阅读 · 1 评论 -
设计模式 - 六大设计原则之DIP(依赖倒置原则)
设计代码架构时,高层模块不应该依赖于底层模块,二者都应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象。依赖倒置原则是实现开闭原则的重要途径之一, 它降低了类之间的耦合,提高了系统的稳定性和可维护性。原创 2023-01-28 07:45:00 · 25913 阅读 · 1 评论 -
设计模式 - 六大设计原则之ISP(接口隔离原则)
接口隔离原则(Interface Segregation Principle, ISP),要求尽量将臃肿庞大的接口拆分成更小的和更具体的接口,让接口中只包含相关的方法。接口隔离是为了高内聚、低耦合。在实际的开发中,通常都是先定义好需要开发的接口,并由各个服务去实现。但是如果没有经过考虑和设计,很可能造成一个接口中包含了众多的接口方法,而这些接口并不一定在每一个类中都需要实现, 这样的接口很难维护, 也不易于扩展,每一次修改验证都有潜在的风险。在具体应用接口隔离原则时, 应该根据以下几个规则进行考量。原创 2023-01-27 22:51:54 · 26053 阅读 · 0 评论 -
设计模式 - 创建型模式_原型模式
原型模式主要解决的问题就是创建重复对象,⽽这部分 对象 内容本身⽐较复杂,⽣成过程可能从库或者RPC接⼝中获取数据的耗时较⻓,因此采⽤克隆的⽅式节省时间。原创 2023-01-27 13:56:48 · 26266 阅读 · 1 评论 -
设计模式 - 六大设计原则之SRP(单一职责)
单一职责原则(Single Responsibility Principle, SRP)又称单一功能原则,是面向对象的五个基本原则(SOLID)之一。它规定一个类应该只有一个发生变化的原因。在程序设计领域,SOLID 是由罗伯特·C·马丁在 21 世纪早期引入的记忆术首字母缩略字,指代了面向对象编程和面向对象设计的五个基本原则。当这些原则被一起应用时,能够使得一个程序员开发一个容易进行维护和扩展的系统变得更加可能。原创 2023-01-23 11:27:28 · 26656 阅读 · 0 评论 -
设计模式 - 六大设计原则之OCP(开闭原则)
在面向对象编程领域中,开闭原则规定软件中的类、对象、模块和函数对扩展应该是开放的,但对修改是封闭的。这意味着 应该用抽象定义结构,用具体实现扩展细节,以此确保软件系统开发和维护过程的可靠性。开闭原则的核心思想-----> 面向抽象编程。/*** 计算面积,长方形* @param x 长* @param y 宽* @return 面积/*** 计算面积,三角形* @param x 边长x* @param y 边长y* @param z 边长z* @return 面积。原创 2023-01-23 14:36:32 · 26621 阅读 · 0 评论 -
设计模式 - 六大设计原则之LSP(里氏替换)
里氏替换原则(Liskov Substitution Principle , LSP) 由麻省理工学院计算机科学西教授 Barbara Liskov 于1987年提出, 她提出:继承必须确保超类所拥有的性质在子类中仍然成立。原创 2023-01-23 19:54:48 · 27004 阅读 · 0 评论 -
设计模式 - 创建型模式_工厂方法模式
优秀的代码在结构设计上松耦合易读易扩展,在领域实现上⾼内聚不对外暴漏实现细节不被外部⼲扰。⼯⼚模式⼜称⼯⼚⽅法模式,是⼀种创建型设计模式,其在⽗类中提供⼀个创建对象的⽅法, 允许⼦类决定实例化对象的类型。它的主要意图是定义⼀个创建对象的接⼝,让其⼦类⾃⼰决定实例化哪⼀个⼯⼚类,⼯⼚模式使其创建过程延迟到⼦类进⾏。优点: 简单说就是为了提供代码结构的扩展性,屏蔽每⼀个功能类中的具体实现逻辑。让外部可以更加简单的只是知道调⽤即可,同时,这也是去掉众多 ifelse 的⽅式。原创 2023-01-25 14:18:20 · 25746 阅读 · 0 评论 -
设计模式 - 创建型模式_抽象工厂模式
抽象⼯⼚模式与⼯⼚⽅法模式虽然主要意图都是为了解决,接⼝选择问题。但在实现上,抽象工厂是⼀个中心工厂,创建其他工厂的模式。举个例子:不同系统内的回⻋换⾏Unix系统⾥,每⾏结尾只有 ,即 \n;Windows系统⾥⾯,每⾏结尾是 ,即 \n\r;Mac系统⾥,每⾏结尾是 IDEA 开发⼯具的差异展示(Win\Mac)除了这样显⽽易⻅的例⼦外,我们的业务开发中时常也会遇到类似的问题,需要兼容做处理。但⼤部分经验不⾜的开发⼈员,常常直接通过添加ifelse。原创 2023-01-26 11:15:01 · 26030 阅读 · 1 评论 -
设计模式 - 创建型模式_建造者模式
建造者模式所完成的内容就是通过将多个简单对象通过⼀步步的组装构建出⼀个复杂对象的过程。举个例子玩王者荣耀的时的初始化界⾯;有三条路、有树⽊、有野怪、有守卫塔等等,甚⾄依赖于你的⽹络情况会控制清晰度。⽽当你换⼀个场景进⾏其他不同模式的选择时,同样会建设道路、树⽊、野怪等等,但是他们的摆放和⼤⼩都有不同。这⾥就可以⽤到建造者模式来初始化游戏元素。⽽这样的根据相同的物料 ,不同的组装所产⽣出的具体的内容,就是建造者模式的最终意图,也就是将⼀个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。原创 2023-01-27 00:38:56 · 26412 阅读 · 0 评论 -
设计模式 - 创建型模式_7种单例模式实现
创建型模式结构型模式⾏为模式⼯⼚⽅法模式抽象⼯⼚模式建造者模式原型模式除此之外还有最后⼀个 单例模式单例模式可以说是整个设计中最简单的模式之⼀,在编程开发中经常会遇到这样⼀种场景,那就是需要保证⼀个类只有⼀个实例哪怕多线程同时访问,并需要提供⼀个全局访问此实例的点。单例模式主要解决的是,⼀个全局使⽤的类频繁的创建和消费,从⽽提升提升整体的代码的性能。原创 2023-01-27 10:15:23 · 25945 阅读 · 0 评论 -
设计模式 - 漫谈软件编程背后的系统化思维
文章目录概述分层思维工程思维对象思维迭代思维概述Unix 操作系统诞生于 20 世纪 60 年代,经过几十年的发展,技术日臻成熟。在这个过程中,Unix 独特的设计哲学和美学也深深地吸引了一大批技术开发人员,他们在维护和使用 Unix 的同时,Unix 也影响了他们的思考方式和看待世界的角度。Unix 哲学是一套基于 Unix 操作系统顶级开发者们的经验所提出的软件开发的准则和理念。也就是说,Unix 哲学并不是正统的计算机科学理论,它的形成更多是以经验为基础。你一定听说过模块化、解耦、高内原创 2021-06-06 11:19:33 · 20833 阅读 · 7 评论 -
设计模式 - 基本功的重要性
文章目录基本功如何学好设计模式基本功代码质量既是设计出来的,也是迭代优化出来的。换句话说,无论是前期的产品需求分析、架构设计,还是后期的详细代码设计与编码,都离不开良好的设计。程序设计是每个程序员的基本功。但是,大多数人都只是对新技术充满热情,却很少有人愿意沉下心来,花几个月甚至一两年的时间来重温基础知识,修炼基本功。在面对所谓“新技术”的浪潮下,一直看不透背后隐藏的朴实规律,只是东一榔头西一棒槌地在原地踏步。过去,在重新学习设计模式之前,我也固执地认为,程序设计不过是空中楼阁,只是架构师们原创 2021-05-31 22:55:21 · 19557 阅读 · 12 评论 -
设计模式 -结构型模式_门面模式(外观模式) Facade Pattern 在开源软件中的应用
文章目录Pre定义DemoTomcatMybatisPre我们先来回顾下门面/外观模式Facade Pattern的定义及基本使用,然后我们在开源软件中来看下是如何实践的。定义Facade Pattern 为子系统中的一组接口提供一个一致的入口,该模式定义了一个高层接口,这个接口呢使得第三方更加容易调用该系统,而无需关注内部的细节实现。DemoTomcatRequestFacadeMybatisSqlSession...原创 2020-06-09 07:15:58 · 10620 阅读 · 6 评论 -
设计模式 -结构型模式_ 装饰者模式Decorator Pattern 在开源软件中的应用
文章目录定义示例结构图定义装饰模式 Decorator : 在不改变原有功能的基础上, 动态的给一个对象添加一些额外的职责 ,非常符合开闭原则 (对修改关闭,对扩展开放)示例结构图原创 2020-06-15 21:46:00 · 10714 阅读 · 0 评论 -
设计模式 -行为型模式_ 观察者模式Observer Pattern 之 JDK内置的实现
在观察者模式中- 发生改变的对象叫做观察目标- 被通知更新的对象称为观察者.原创 2021-04-01 00:21:27 · 13943 阅读 · 0 评论 -
设计模式 - 行为型模式_ 访问者模式Visitor Pattern
文章目录定义定义访问者模式是⼀种⾏为设计模式, 它能将算法与其所作⽤的对象隔离开来。在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。...原创 2021-04-14 00:23:26 · 14148 阅读 · 2 评论 -
设计模式 - 创建型模式_ 单例模式 Singleton Pattern
单例模式常见的写法有: 懒汉式单例,饿汉式单例,登记式单例(可忽略)。单例模式特点:单例类只能有一个实例单例类必须自己创建自己的唯一实例单例类必须给所有其他对象提供这一对象实例单例模式确保某各类只有一个实例,而且自行实例化并向整个系统提供这个实例。比如我们常见的线程池 、缓存等等。选择单例模式就是为了避免不一致的状态,避免政出多头。懒汉式单例 特点: - 懒汉式单例在第一次调用的时候原创 2015-12-06 21:55:34 · 19995 阅读 · 14 评论