二十三种设计模式(白话版)

本文精炼介绍了二十三种设计模式,分为创建型、结构型和行为型三大类。同时阐述了设计模式的六大原则,包括开闭原则、里氏代换原则等,帮助读者深入理解并灵活应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二十三种设计模式(白话版)

tips:作者以尽量精简的语言让大家得到对二十三种设计模式的理解,但是对于这些设计模式,还是得多敲多看代码才能领悟其中的精髓!

======================================================================

一、设计模式的分类

总体来说设计模式分为三大类:

创建型模式,顾名思义:把new的过程交给第三方来帮忙创建!共五种:

工厂方法模式:A、B类交给C类创建,C类按条件去new他们.

抽象工厂模式:A、B类均有对应的工厂类去创建,而工厂类实现自同一接口!优点:当有C类加入时,只需要再增加一个工厂类,扩展性强!

单例模式:在内存中只存在一个对象,1.恶汉式:在调用时已经new好,2.懒汉式:访问才加载,为了避免多线程问题需要加锁!

建造者模式:增强版工厂,可以建造更复杂的对象、控制个数,eg:需要A类1个、B类4个,此时运用建造者模式更妥!

原型模式:简而言之就是克隆,A类就是实现Cloneable接口的clone方法调用super.clone(this)便可以实现浅拷贝,也可以实现Serializable接口将this用流的方式进行深拷贝!
深浅拷贝传送门

======================================================================

结构型模式,共七种:

适配器模式
问题:A类中的B方法返回值是C类,一个接口D的E方法的入口是F类?
答:此时,创建一个G类(适配类)继承A类的实现D接口,得到了A的方法,也能实现D的方法!适配器就像转接口把二项转成三项接入!

装饰器模式:A类被装饰者,B类持有A类引用,B类能在A类调用方法前后做一些事情,并且能够动态取消这些事情,返回A类对象。此时A类对象已经被装饰过了!

代理模式:这个模式大家并不会陌生,proxy代理对象持有A的引用,并在A调用方法前后做事情,并返回A对象。感觉跟装饰者模式没区别?有什么不一样请大神指点指点。

外观模式:一个调用过程需要A、B、C三个类,ABC又会相互持有对方,这时候,不如用D类持有ABC三个类,既能降低ABC的耦合程度,又能将过程统一归类!

桥接模式:A、B、C均继承D接口,此时就可以用E类来承接D接口,并且做一些均有的特性。通过放入的实现类的不一样,就可以调用不用的具体实现方法!

组合模式:目标A.B两类,C类持有A.B类引用,所以C为组合类!

享元模式:共享池,A类维护一个List,当使用B时,直接在A类取,用完还能放回去!

======================================================================

行为型模式,共十一种:

策略模式:A.B.C三类均实现了D接口,用户可以根据喜好,选择不同的类,只要NEW不一样的就OK,接口都是一样的!

模板方法模式:抽象类A实现了B方法,并且在B方法调用了C方法(未实现),实体类D继承A重写C方法,调用方只要调用B方法边可以根据抽象类A的B模板方法去调用具体实现类的C方法!

观察者模式:类似监视的功能,当具体类A操作的时候,调用相应的观察者接口B。

迭代子模式:类似集合迭代器,区别就是新建类B迭代器来入口就是集合A,而集合是使用内部类去实现!

责任链模式:A.B.C相互引用,最后调用者不知道谁调用谁,不知道这个过程,所以用D类持有A.B.C的接口类,提供get,set和相应的方法,所以只要new D类,并将要调用的类set进去并调用就可以得到调用顺序。

命令模式:将请求和执行者解耦,执行者A类,B类持有A类对象实现C命令行接口拥有D方法可以生成命令行到具体的类中,E类具体执行者持有C类接口引用,调用其具体方法!具体:new A类,new B类并将A类set进去,new E类,执行方法!命令可以有很多种,调用方法也可以很多!

备忘录模式:目标类A,在类B中持有A引用。当想恢复时,直接去B类中还原A。

状态模式:红灯A,绿灯B,均继承一个接口C,类D持有接口C提供set,get方法,此时只要new A,B,D,就可以在类D中为所欲为了。

访问者模式:目标类A,类B中C方法有A的入口,放入A就能调用A的方法,适合不改变A类的场景!

中介者模式:目标A.B,类C持有A.B引用,并能实例化,调用响应方法进行工作!类C只是提供A.B的工作.

解释器模式:比如正则表达式的解释器!

======================================================================

二、设计模式的六大原则

1、开闭原则
开闭原则就是说对扩展开放,对修改关闭;想要达到这样的效果,我们需要使用接口和抽象类。

2、里氏代换原则
任何基类可以出现的地方,子类一定可以出现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

3、依赖倒转原则
真对接口编程,依赖于抽象而不依赖于具体。SPRING的DI

4、接口隔离原则
使用多个隔离的接口,比使用单个接口要好。

5、迪米特法则(最少知道原则)
一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。

6、合成复用原则
原则是尽量使用合成/聚合的方式,而不是使用继承。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值