【设计模式】用一个专题带你玩转设计模式

🍄 什么是设计模式?

如果说代码是砖石,那么设计模式就是蓝图,它描述了开发者如何建成一座稳固的大厦。

设计模式(Design pattern)代表了最佳的实践。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案,这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

 
 

☘️ 设计模式有何作用?

设计模式是针对软件设计中常见问题的 工具箱 , 其中的工具就是各种经过实践验证的解决方案。即使你从未遇到过这些问题,了解模式仍然非常有用,因为它能指导你如何使用面向对象的设计原则来解决各种问题。

设计模式定义了一种让你和团队成员能够更高效沟通的 通用语言 。你只需说 “哦,这里用单例就可以了”,所有人都会理解这条建议背后的想法。只要知晓模式及其名称,你就无需解释什么是单例。
 
 

💎 设计模式从何而来?

谁发明了设计模式?这是一个很好的问题,但也有点不太准确。 设计模式并不是晦涩的、复杂的概念——事实恰恰相反。模式是面向对象设计中常见问题的典型解决方案。同样的解决方案在各种项目中得到了反复使用, 所以最终有人给它们起了名字,并对其进行了详细描述。这基本上就是模式被发现的历程了。

模式的概念是由 C.Alexander 在其著作 《建筑模式语言》 中首次提出的。本书介绍了城市设计的 “语言”,而此类 “语言” 的基本单元就是模式。模式中可能会包含对窗户应该在多高、一座建筑应该有多少层以及一片街区应该有多大面积的植被等信息的描述。

四位作者(Erich GammaRichard HelmRalph JohnsonJohn Vlissides)接受了模式的概念。 1994 年, 他们出版了 《设计模式: 可复用面向对象软件的基础》 一书, 将设计模式的概念应用到程序开发领域中。该书提供了23个模式来解决面向对象程序设计中的各种问题,很快便成为了畅销书。 但由于书名过长 ,书名被简化为 《GoF的书》 ,即四人组的书。

此后,人们又接连发现了几十种模式,甚至程序设计之外的模式。无论是城市设计领域,还是程序设计领域,设计模式的目标都是一致的,正如文章开头所说的那样——我们希望有这样一堆蓝图,帮助我们建成一座稳固的大厦。

 
 

🌸 关于设计模式有哪些争议?

毫无疑问,设计模式被广泛接受的同时,依旧存在着「设计模式无用论」甚至「设计模式有害论」。事实上,设计模式自其设计之初就饱受争议。我们也没打算忽视这些争议。

“这是一种针对不完善编程语言的蹩脚解决方案。当某种编程语言的设计不够完善时,人们才需要设计模式对其进行补充。这种缝缝补补对于编程语言本身的完善,又是有害的。”

“设计模式是一种教条,一些人(尤其是初学者)会在一些简单的代码出使用某种设计模式。当你手上有一把铁锤,那么任何东西看上去都像是钉子。”

 
 

⭐️ 设计模式如何分类?

1)创建型模式 —— 不仅仅使用new创建对象,而是使用灵活性和可复用性更高的机制

2)结构型模式 —— 如何将对象组装成较大的结构,并同时保持结构的灵活高效

3)行为型模式 —— 对象之间如何通信,即对象之间如何进行高效沟通与职责委派

 
 

⭐️ 设计模式的六大原则是什么?

1)开闭原则:对扩展开放,对修改关闭

2)单一职责原则:一个类只负责一项职责,只有一个能引起它变化的原因

3)里氏代换原则:所有使用父类的地方都可以用子类替换

4)依赖倒置原则:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象

5)接口隔离原则:使用多个专门的接口,而不使用单一的总接口

6)迪米特法则:一个实体应当尽量少的与其他实体之间发生相互作用

 
 

🚪 传送门

在这里插入图片描述简单工厂模式一个工厂能够根据需要产生不同的产品。如果是根据参数生产产品,则称为简单工厂模式。
在这里插入图片描述工厂模式一个工厂能够根据需要产生不同的产品。定义一个创建对象的工厂接口,其子类自己已经决定好了生产哪一种产品,则称为工厂模式。
在这里插入图片描述抽象工厂模式一个工厂能够根据需要产生不同的产品。这个子类工厂能生产一套产品。则称为抽象工厂模式。
在这里插入图片描述建造器模式通过建造器,使用多个简单的对象一步一步构造出一个复杂的对象。
在这里插入图片描述原型模式直接复制已有对象,而不依赖它们所属的类。对象本身自己复制自己。
在这里插入图片描述单例模式单例模式保证一个类仅有一个实例,并提供一个访问它的全局访问点。饿汉很饿,在类加载时就实例化;懒汉很懒,第一次调用时才初始化。
在这里插入图片描述适配器模式适配器模式使得原本不兼容的两个类可以合作工作。适配器的本质是欺骗,它有着A类的外表,却有着B类的内容。
在这里插入图片描述桥接模式桥接模式把复杂类解耦为两个独立的维度,使得二者可以独立变化。
在这里插入图片描述组合模式组合模式将对象组合成树状的层次结构。组合模式使得用户对简单元素和复杂容器的使用具有一致性。
在这里插入图片描述装饰器模式装饰器模式是对现有类的一个包装,是继承的一种替代方案。装饰类中拥有一个指向现有类的成员变量。
在这里插入图片描述外观模式外观模式为一组繁杂的接口提供了一个简洁的高层接口。内部子系统的复杂性被隐藏,从外观看来简单易用。
在这里插入图片描述享元模式享元模式通过共享多个对象所共有的相同状态,减少对象占用的内存。享元模式的本质其实是缓存。
在这里插入图片描述代理模式代理模式就是为原对象找一个代理,代理可以保护、缓存、增强、控制原对象。
在这里插入图片描述责任链模式责任链上的每个处理者都拥有下一个处理者的引用。请求被放到责任链上,如果当前处理者无法处理该请求,那么它会把请求传送给下一个处理者,以此类推。
在这里插入图片描述命令模式命令模式即发送者-命令-接收者的结构。这替代了发送者对接收者的直接调用。
在这里插入图片描述迭代器模式把遍历元素的任务交给迭代器即可。既让客户端感到方便,又能隐藏集合的底层实现。
在这里插入图片描述中介者模式减少对象之间混乱的通信,由中介者对它们进行统一的协调。
在这里插入图片描述备忘录模式备忘录模式会捕获一个对象的内部状态,并在该对象之外保存这个状态,从而可以在以后将对象恢复到原先保存的状态。
在这里插入图片描述观察者模式观察者模式即发布-订阅模式。发布者的状态发生改变,所有订阅者都将得到通知。
在这里插入图片描述状态模式状态模式让你能在一个对象的内部状态变化时改变其行为,使其看上去就像改变了自身所属的类一样。一个行为使其从一种状态转移到另一种状态,这和「有限状态自动机」极其相似。
在这里插入图片描述策略模式策略模式就是定义一系列的算法,把它们一个个封装到不同的类中,并且使它们可相互替换。
在这里插入图片描述模板方法模式在父类中定义一个算法的骨架,子类实现骨架中的方法,但不能改变骨架的结构。
在这里插入图片描述访问者模式访问者模式将数据结构与数据操作分离。被访问者拥有一个接待访问者的方法,该方法实现调用主体的反转。

 
 

🧩 更多精彩

不想来我的博客逛一逛吗:Blog戳这里

仓库的大门也向你敞开哦:Github戳这里

如果你有建议or意见,欢迎随时私信✉️~

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

爱你😘

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值