前言
咳咳,鉴于我也是个工作不久的小白猿,也是为了学习和对设计模式更好的使用,参考部分资源,整理了这一份文章。码神们不喜勿喷呦~
正文
写文章之前,花了小小的时间画了个脑图,介绍每一个模式是干嘛用的,具体实现,还希望各位多多动手,牢记在心,应用到自己参与的项目之中。
从这个脑图大家也看出来了,设计模式一共分三类
一、下面先说说,五种创建型模式
单例模式:使内存中只存在一个对象,存在两种方式:
饿汉式:在调用之前已经new好,保证只有这一个
懒汉式:访问才去new,可以避免多线程需要加锁的问题
工厂方法模式:把a类,b类…交给c类去创建,c类按条件去new
抽象工厂模式:a、b类有对应的工厂类去创建,然后工厂类实现同一接口,当有新的c类要使用时,只需再加一个工厂类,扩展性强
建造者模式:工厂升级版,可以建造更复杂的对象并控制个数,e如果需要a类1个、b类3个,运用建造者模式更好
原型模式:简单来说就是克隆,a类就是实现Cloneable接口的clone方法,也可以实现Serializable接口流的方式
二、七种结构型模式
适配器模式:
问题:a类中的b方法返回值是c类,d接口的方法e的入口是f类,创建一个适配类g,继承a类的实现d接口,这样就得到了b方法,也能实现e方法
装饰器模式:也叫包装器模式,a类,b类被装饰者,c类为装饰类,引用a类b类,c类在a类b类调用方法时,或前或后的做其它操作,然后返回其对象。
这种情况下c类装饰了a类b类,而c类实现了d类,是真正要装饰的类,a和b都是为了d操作,而d类也可以实现具体动作的接口(突然想到了面向接口编程~哈哈)
代理模式:将流程代码放到proxy类中处理,通过代理控制对对象的访问。(这可是aop面向切面的核心~)
比如结婚这件事需要:准备>找地方>找人>结婚流程>其它事。使用代理就相当于找了个婚庆公司,把结婚流程的部分交给婚庆公司处理
外观模式:一个调用需要abc三个类,abc又会相互持有对方,这时候,用d类持有abc三个类,降低abc的耦合度,过程统一
桥接模式:abc类实现d接口,可以用e类来引用c接口,并且做一些均有的特性。通过放入的实现类的不一样,可以调用不同的实现方法
组合模式:有ab两类,c类拥有ab类引用,c就是组合类(这个模式我们可能在平时会不经意的使用到吧?)
享元模式:a类维护一个集合,当b使用时直接在a中取,c使用时也在a中取,a就相当于一个共享池
三、十一种行为型模式
策略模式:abc三类都实现d接口,使用同一个接口,可以new想用的某个类
模板方法模式:抽象类a调用了b1,b2方法,c类继承抽象a,就相当于调用了b1b2方法,对他们进行具体的操作(就像老师出题,学生只写答案就行了,不需要再把题抄一遍)
观察者模式:相当于监视的功能,当a类操作时,调用相应的观察者接口b。
迭代子模式:又叫游标模式,类似集合迭代器,区别就是,a类入口来存放集合b,而b集合是在a类中使用内部类去实现各种方法(如获取大小,遍历等等)
责任链模式:A.B.C相互引用,最后调用者不知道谁调用谁,不知道这个过程,所以用D类持有A.B.C的接口类,提供get,set和相应的方法,所以只要new D类,并将要调用的类set进去并调用就可以得到调用顺序。
命令模式:调用者→接受者→命令
比如你在吃烧烤,肉串吃完了叫服务员加串,服务员就会告诉烤串师父加串,烧烤师父就执行烤串的任务。这里调用者是服务员,接受者是烤串师父,执行了烤串命令。
备忘录模式:有个a类,b类引用a,想恢复时,直接去b类找a类
状态模式:红灯a,绿灯b,都继承接口c,d类拥有接口c的set、get方法,这样只要使用d类就可以为所欲为的控制灯了(嘿嘿嘿~)
访问者模式:有个a类,b类中的方法放入a就能调用a的方法,适合不改变a类的场景
中介者模式:a类b类,c类有ab引用,可以实例化,调用方法,
c类只是提供ab的工作(顾名思义,租房中介懂了吧?)
解释器模式:通过一个解释器对象处理一个规则的方式,把复杂的功能分离开;然后选择需要被执行的功能,把这些功能组合成为需要被解释执行的方法;再按照方法来解释执行,实现相应的功能
总结
每个设计模式大致的意思就是这样了,还是建议多多动手操作,这样才能牢记在心,最后在应用在项目中。
有些模式还可以相互组合,搭配使用,这样更能提高代码的水平。
我是左小涩,一个独自在大城市努力的年轻人。
对您有帮助的话,希望献上您的【三连】呦!