手把手教你如何玩转:设计模式

10 篇文章 1 订阅
1 篇文章 0 订阅
  1. 小蜗牛,今天爬了多远?不急,继续爬总会到达终点。
  2. 朋友们,今天学习了多久?别慌,保持学习才会看到更好的自己。
  3. 觉得我的文章还不错的,欢迎大家还可以关注我的微信公众号Java菜鸟进阶之路
  4. 最近会写一个系列的文章进行推出,值得期待和持续关注哦!

情景引入

场景

三室两厅两卫的住宅房子

让人秃头的忧愁

(1)住宅的户型如何设计才能让房子的面积尽可能的被利用呢?
(2)大小一样的房子面积怎样设计它才让人存在耳目一新的感觉呢?
(3)客厅餐厅需要放置什么家具?主卧需要放置什么家具?厨房需要放置哪些家具?卫生间的器具又有哪些?
(4)房间每个区域的家具又如何摆放才是最完美的呢?

恰到好处的方案

  1. 尽可能的让有相关性的房间聚拢,以便使用过程中较为方便。比如,餐厅客厅厨房,它们三者应该尽可能在一个区域。假设,厨房在东南角,客厅在最西北角,那么以后生活可真费力,吃顿饭都向爬了一次“珠峰”。
  2. 区域规整,装饰美观,具有“人性化”设计风格。比如,尽可能让每个区域都规则,这样可以让空间利用率大(PS:毕竟现在房价都不便宜)。假设,一个区域菱形,一个区域三角形,那么必然会相比规整的方案设计会存在更多的浪费空间。
  3. 客厅餐厅放餐桌,沙发,电视;主卧放置“席梦思”大床和大衣柜;厨房放置油烟机;卫生间放置马桶;总之,让家具呆在它该在的地方。比如,马桶放置在客厅,你是想最大程度吸收“香气”吗?
  4. 沙发和电视应该是对立放置;大床和衣柜尽量之间留有空间;总之,摆放尽可能使用方便。

回归重点

  • 不不不,各位千万不用怀疑,你所阅读的不是教你【如何当一名优秀的设计师】。我们当然不是走室内设计的路线,也不是走房地产推销的套路,我们还是一如既往的走着稳稳当当的程序员秃头之路。

  • 在【情景引入】中所讲到的场景,其实,我想是日常不管是亲身经历还是都有所耳闻的事情,并且类似这样的设计场景和方案随处可见,比如,公园,地铁等等;现在,我们一起回想和体会一下,对于这些场景,是不是都涉及到一个非常重点的内容,即设计。很好,我们继续思考,把【三室两厅两卫】的房子,就当作我们眼里【一团团乱糟糟】的代码;把【房子的各个区域】,就当作眼里【一个个类对象】;把【家具】,就可以看成是【类中的不同属性】。

  • 好了,先别急着往后看,我们先认真思考上面这个类比内容,是否找到了程序员熟悉的味道呢?如果你感受到了,那么请继续往下看。

  • 代码,类,属性,如何优雅的将它们给整合与搭配,让别人一看代码就发出:【佩服佩服,写得一手好代码】,而不是发出:【我去,这垃圾代码是谁写的,赶紧抓起来!】,这或许是我们每个程序员都想实现的梦想。那么,如何才能设计出清晰的逻辑和优雅的代码,就请出我们这次的大咖--------【设计模式】(Design Pattern)

设计模式(Design Pattern)

含义

  • 在菜鸟教程中提到:设计模式是一套被反复使用的、多数人知晓的、经过分类、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 而常用的描述即为:设计模式是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。
  • 总而言之,通俗易懂的话,我们可以这样理解:设计模式是一种思维,主要用于将零散,冗余的代码通过不同的设计方式以致代码更为清晰和优雅和易懂。设计模式,经过了多年的锤炼,已经被广泛应用于实践,合理的利用设计模式能够达到1+1>2的效果

适用对象

  1. 小白程序员:学习到优秀的代码风格和代码编写思维;
  2. 大佬程序员:提升自身的编写代码规范和联想架构思维;
  3. 非程序员:学习类似问题的解决方案思维;

分类

总数

实实在在算起来共:23种。

目的分类的类别

  1. 创建型模式(Creational Patterns)
    通俗的理解:对象怎么来。
    详细的解析:该类别提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。
  • 工厂模式(Factory Pattern)
  • 抽象工厂模式(Abstract Factory Pattern)
  • 单例模式(Singleton Pattern)
  • 建造者模式(Builder Pattern)
  • 原型模式(Prototype Pattern)
  1. 结构型模式(Structural Patterns)
    通俗的理解:对象和谁有关。
    详细的解析:该类别关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。
  • 适配器模式(Adapter Pattern)
  • 桥接模式(Bridge Pattern)
  • 过滤器模式(Filter、Criteria Pattern)
  • 组合模式(Composite Pattern)
  • 装饰器模式(Decorator Pattern)
  • 外观模式(Facade Pattern)
  • 享元模式(Flyweight Pattern)
  • 代理模式(Proxy Pattern)
  1. 行为型模式(Behavioral Patterns)
    通俗的理解:对象与对象在干嘛。
    详细的解析:该类型关注对象之间的交互。
  • 责任链模式(Chain of Responsibility Pattern)
  • 命令模式(Command Pattern)
  • 解释器模式(Interpreter Pattern)
  • 迭代器模式(Iterator Pattern)
  • 中介者模式(Mediator Pattern)
  • 备忘录模式(Memento Pattern)
  • 观察者模式(Observer Pattern)
  • 状态模式(State Pattern)
  • 空对象模式(Null Object Pattern)
  • 策略模式(Strategy Pattern)
  • 模板模式(Template Pattern)
  • 访问者模式(Visitor Pattern)

特别注意:咋眼一看,这么多,怎么才能记住啊,这太难了。亲,我可没说要让你们记住,各位只需先大概了解了解就好了,我相信,通过后面我对每一个模式的讲解之后,你们想不记住都很难。所以,要记得持续关注哦!

原则(五个原则+1个法则)

  1. 开闭原则(Open Close Principle)
  • 简解:实现热插拔,提高扩展性
  • 详解:对外扩展开放,对内修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。
  1. 里氏代换原则(Liskov Substitution Principle)
  • 简解:实现抽象的规范,实现子父类互相替换。
  • 详解:任何基类可以出现的地方,子类一定可以出现。LSP 是继承复用的基石,只有当派生类可以替换掉基类,且软件单位的功能不受到影响时,基类才能真正被复用,而派生类也能够在基类的基础上增加新的行为。里氏代换原则是对开闭原则的补充。实现开闭原则的关键步骤就是抽象化,而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。
  1. 依赖倒转原则(Dependence Inversion Principle)
  • 简解:针对接口编程,实现开闭原则的基础。
  • 详解:是开闭原则的基础,针对接口编程,依赖于抽象而不依赖于具体。
  1. 接口隔离原则(Interface Segregation Principle)
  • 简解:降低耦合度,接口单独设计,互相隔离。
  • 详解:使用多个隔离的接口,比使用单个接口要好。另一则含义为:降低类之间的耦合度。由此可见,其实设计模式就是从大型软件架构出发、便于升级和维护的软件设计思想,它强调降低依赖,降低耦合。
  1. 合成复用原则(Composite Reuse Principle)
  • 简解:尽量使用聚合,组合,而不是继承。
  • 详解:尽量使用合成/聚合的方式,而不是使用继承。
  1. 迪米特法则,又称最少知道原则(Demeter Principle)
  • 简解:功能模块尽量独立。
  • 详解:一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。

场景

设计模式的不同类别所针对的场景也不一样。比如:单例设计模式意味着全局使用单个对象的场景;工厂设计模式意味着统一制造不同类等等。具体如何使用,那么就敬请期待后续的每一种设计模式的详解文章。

总结

  1. 首先,设计模式存在着多种类别,不同类别具有不同的效果,而我们要明白一点:在合适的时候使用合适的模式,这才是最为合适的模式,而不是不论场景,疯狂套用。
  2. 其次,设计模式它是一种思想,并不局限于代码之中,其实涉及方方面面,我们应该多发现,勤思考,让这种设计思想存在于我们的脑海,而不是死记硬背它的实现。
  3. 然后,让逻辑思维更清晰,让代码写得更优雅,设计模式仅仅是其中的一种辅助剂,还有其他的内容值得我们继续学习,当然,我后续也会不断推出这方面的内容。
  4. 最后,如果各位看官觉得文章不错,那么帮忙推广给身边的朋友,自然感激不尽
    感谢各位的阅读,真诚希望各位学到知识,提升自我。

彩蛋

  • 说到设计模式,那么有个名词:GOF,这就需要科普科普。
  • GOF实际是Gang of Four的缩写,字面上理解就是:四人帮,其实就是指Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides这四个人。他们四个人早在1995年就干了一件大事。
  • 他们四个人合作出版了一本名为:Design Patterns - Elements of Reusable Object-Oriented Software(设计模式 - 可复用的面向对象软件元素)的书。
  • 这本书就厉害了,因为它首先提到了关于【设计模式】的概念,并且该书主要是基于如下的两个设计原则
  1. 对接口编程而不是对实现编程。
  2. 优先使用对象组合而不是继承
  • 基于这本书所提出的设计模式的概念,后续不断的影响着越来越多的程序员们,也就逐渐让【设计模式】更为完善的呈现在当今。所以,这也算是【设计模式】的鼻祖了。

后续,会一直推出【设计模式】一系列的文章,欢迎关注!!
大家还可以关注我的微信公众号:Java菜鸟进阶之路

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值