【Java核心】软件工程中的23种设计模式
23种设计模式:
创建型模式:工厂、抽象工厂、单例、建造者、原型
单例模式
工厂类:过程是产品->工厂
简单工程、工厂、抽象工厂
建造者类:过程是产品到建造者到导演(多了导演)
原型模式:抽象接口->原型类->实际类
状态模式:工作流或游戏、ERP系统中有大量使用;具体实现可以是策略模式或逻辑条件
行为型模式:模板方法、中介者、观察者、访问者、命令、责任链、策略、迭代器、解释器、备忘录
模板方法模式:基类->继承类->实现方法
中介者模式:中介者类->同事类 不可滥用在非网状结构中
观察者模式:监听变化
访问者模式:Element让Visitor访问自己;Java的动态绑定和双委派
java的重载是静态绑定的,继承是动态绑定的;利用访问者模式可以实现重载的动态绑定,即visitor.method(A)=>A.accept(visitor) + accept(Visitor visitor) {visitor.method(this)},不同类型的A(指针所指)就被动态绑定了
命令模式:将请求封装成对象
责任链模式:将逻辑判断交给分派的类,性能问题可能比较严重
策略模式:类似模板方法模式,但是Strategy类一般是接口,没有具体实现,要靠Context实现。可以选择多个strategy按需使用,考虑排序算法的例子。
迭代器模式:迭代器接口、容器接口 [哈希表的迭代器怎么做的?]
解释器模式:文法规则的使用,编译原理, interpreter
备忘录模式:中间内容记录,可用于jdbc事务
结构性模式:适配器、装饰器、代理、外观、桥接、组合、享元
适配器模式:用适配器去调用已经存在但是不符合我们要求的类接口,使得底层类被封装成我们想要的接口,实际的算法操作是底层类实现的。例如STL中会用queue适配vector
装饰器模式:不改变被装饰者的内部结构,只是增加更多的方法,加在类内容的首尾
代理模式:客户端->调用代理->调用被代理人+代理实现方法
外观模式(Facade):就是一个主要的类调用多个模块
(跟适配器、代理模式有什么区别?)代理无法直接访问目标,而外观可以;桥接模式
桥接模式:桥接模式有时类似于多继承方案,但是多继承方案违背了类的单一职责原则,复用性比较差,而且多继承结构中类的个数非常庞大,桥接模式是比多继承方案更好的解决方法。
组合模式:客户端->顶端类->Composite 添加叶子节点类->顶端类方法做遍历
享元模式(Flyweight):String是存在常量池的,就应用了享元模式;都是通过哈希和工厂类使得同内容的数据共享一份实例
UML图示意:
虚线、实现、三角形箭头、菱形箭头
References:
23种设计模式汇总整理 http://blog.csdn.net/jason0539/article/details/44956775
23 种设计模式 http://wiki.jikexueyuan.com/project/java-design-pattern/
辨析代理模式、外观模式、适配器模式三者区别 http://blog.csdn.net/u010375663/article/details/35797163
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通