【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

posted @   stackupdown  阅读(1047)  评论(0编辑  收藏  举报
编辑推荐:
· 基于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最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示