写点什么

如何学习设计模式

用户头像
elfkingw
关注
发布于: 2020 年 06 月 23 日
如何学习设计模式

现在很多程序员同学在工作中抱怨写的都是一些CURD的业务代码,根本接触不到设计模式,不知道在工作中如何运用设计模式。很多人在工作之余也会看一些设计模式的博客或者书籍,发现学了设计模式后自己还做了个小例子,但是过一段时间就完全忘了学过的设计模式,更谈不上在工作中运用。

为什么学过了会忘呢?人类的大脑在接触新事物后有个遗忘曲线,如果学习后不运用和回顾,过不了多久就会遗忘。如何能够比较牢固的掌握设计模式呢?接下来给大家分享几个方法:

1.记住一个案例

记住设计模式比较常见的一个案例,可以JDK或者常用框架比如Spring框架中的案例。拿装饰器模式来说JDK里的IO流操作就是很好的例子:

BufferedReader bf = new BufferedReader (new InputStreamReader (new FileInputStream ("filePath")))

上面代码中的BufferReader 和InputerStreamReader都是继承于Reader,BufferReader作为装饰器增强了InputSteamRader的功能增加了缓冲功能。

还有很多例子:

适配器模式:JDBC Driver 就是将不同的数据库适配到JDBC



2.记住设计模式的代码特点

每一种设计模式中都有个模板,代码中都会有一定的特点,例如:

观察者模式:被观察者类里一定有一个LIst<监听类> ,有增加监听的方法

模板方法模式:模板方法里的抽象类一定有个模板方法定义好处理流程,处理步骤调用抽象方法

组合模式:组合类和被组合的类实现同一个接口,组合类里有一个List<接口>

策略模式:调用者依赖一个抽象,该抽象可以被调用者用构造函数实例化,使用的时候构造函数里传入不同的策略实现即可

代码模式:cglib代理、JDK动态代理



3.设计模式解决什么场景问题

  • 通过显示地指定一个类来创建对象

工厂模式

  • 为请求指定一个特殊操作时, 完成该请求的方式就固定下来, 写死了代码

责任链、命令模式

  • 算法在开发和复用时常常被扩展、优化和替代。依赖某个特定算法的对象发生变化时不得不变化

建造者、迭代器、策略、模版方法、访问者

  • 使用抽象耦合和分层技术提高系统的松散耦合性设计

抽象工厂、命令、门面、中介者、观察者、责任链

  • 通过组合技术和具体的委托技术这种灵活的方式,可以定一个字累,且将它的实例和已存在的实例进行组合引入定制的功能设计

桥接、责任链、组合、装饰器、观察者、策略

  • 直接对类进行功能增强,而不是修改类设计

适配器、装饰器等



最后学习设计模式死记硬背肯定是效果甚微的,最好的方式还是在工作中直接运用,如果运用中解决了系统的程序设计的问题,那么你使用过的设计模式肯定就掌握了,以后遇到类似的场景你也会信手拈来。真正的高手是不会去死记硬背这些模式的,他们可以很灵活的使用面向对象多态的特性,通过这些特性来灵活设计代码,最后做出来即使不是严格按照设计模式的模式来设计的一样也能达到面向对象设计原则的要求。



用户头像

elfkingw

关注

还未添加个人签名 2018.02.04 加入

还未添加个人简介

评论

发布
暂无评论
如何学习设计模式