23种设计模式以及关联关系

  • 结构型模式
  1. 适配器模式(adapter):当两个程序之间无法直接调用的时候,会在中间加上一个适配器.有两种模式,分别是类适配器模式和对象适配器模式,类的适配是指当一类像调用某个接口的功能,但是不能直接实现此接口,那么创建一个适配器,继承该类同时实现此接口.是让类和接口产生关联.对象的模式是使两个类产生关联,使适配器中集成一个对象(被适配者),让另一个类(对象)调用.
  2. 桥接模式(bridge):桥接模式是将类的功能层次结构和类的实现层次结构连接起来。功能层次结构是指,在子类中添加功能。实现层次结构是在抽象的父类中定义功能,由实现它的子类来完成具体的功能。
  3. 组合模式(composite):当我们想找文件夹下什么东西的时候,文件夹下可能是文件也很能包含了另个文件夹,这个文件下亦是如此,这种能够使结构和内容具有一致性,创造出递归模式就是组合模式.他们都继承了一个相同的类.多个对象聚集到一起,当做一个对象处理.
  4. 装饰者模式(Decorator):同组合模式一样,也具有一致性,不同在于,装饰的主体是一致的,只是装饰的内容不同.
  5. 外观模式(facade):为相互关联错综复杂的类整理出高层接口.而且还会考虑各个类的调用顺序.当调用程序会有类的顺序规定,这时候就要考虑外观模式了.
  6. 享元模式(flyWeight):使轻量化,共享模式,是将已经创建好的类进行共享.例如.将数字用字符”*”包裹,最多就处理10个数字,以后不管什么数字,都用创建好的进行组合.
  • 行为型模式
  1. 迭代器模式(Iterator):凡是有遍历的,有next,hasNext方法都是迭代器模式的一种.将遍历i的行为抽象化.相关的设计模式有访问者(Visitor)模式,区别是访问者模式会对元素的进行相同的处理.
  2. 模板模式(template):父类中定义了处理流程的框架,到子类中去实现的模式.相关的模式:工厂模式就是模板模式的一个例子(运用到了模板模式).策略模式,他们都是使用委托改变了程序的行为.不同的是策略模式用于替换整个算法.
  3. 策略设计模式(strategy):是将程序中的算法提取出来,这样方便算法的优化和切换.
  4. 责任链模式(Chain of responsiblity):谁的问题谁处理.在抽象类中,会有一个setNext的方法,通过这个方法,可以将多个解决问题的类串联到一起,形成一个链.这个模式适用于当一个问题对应多种解决方法的时候,避免了if/else的判断.缺点是遍历方法的时候,可能会有些延迟.
  5. 访问者模式(visitor):目的是将数据的结构和处理分离开来.例如我想找到某文件的对应路径,这时,具体的文件类和文件夹类不会去处理请求,而是直接调用visitor,visitor的实现类来定义当遇到文件或文件夹时候的两种处理方式,这样就能使类的结构更加的清晰了,将处理分离了出来.
  6. 仲裁者/中介者模式(Mediator):例如小组之间扯皮,需要有一个领导者拍板,就是中介者模式了,即调整多个对象的关系时候.将控制显示的逻辑处理交给仲裁者负责.

相关的模式:外观模式和中介模式有些相似,不同在于,中介者模式与组员之间的交互是相互的,而外观模式则是单项的.有时也会用观察者模式替换中介者模式使用.

  1. 观察者模式(obverse):当类的状态发生变化的时候,会通知观察者,观察者会根据对象的状态做不同的处理.例如当数字变化的时候,将通知观察者,观察者会显示数字和字符*的方式,显示对应的数字.

发送状态变化通知这一点上,仲裁者模式和观察者模式相同.但是通知的目的和视觉不同,仲裁者收到通知是进行仲裁.而观察者收到是为了让subject 和obverse同步.

  1. 备忘录模式(memento):例如当编辑word文档出现错误时,要进行撤销操作,这时就需要有一个类保存了之前的状态,系统会回复到这个状态.这就是备忘录模式.
  2. 状态模式(State):例如银行的报警系统,晚上相对更加的严格,这样就会有白天和晚上两种状态,使用这个模式的好处是,这就不需要写if/else通过时间来判断状态了.用类直接表示.所用是”分而治之”,将原来的程序打碎.可以增减不同的状态.
  3. 代理模式(proxy):真正的工作不由本类来做,而是由代理人来做,这样的好处是,代理的费时的工作推迟到真正调用的时候.而不是创建类的时候.也有一些代理是保存了缓存,只有数据变化的时候才去真正的类去获取.
  4. 命令模式(command):表达的主旨是命令也是类,当一个类调用其他的类工作的时候,虽然调用的结构会显示在对象的状态中,但是并不会留下工作的历史记录.这时有个类表示请进行这项工作的命令,就好的多.
  5. 解释器模式(interpreter):目的是提高类的可复用性,不需要做太多的修改就可以复用的类.我的感觉是想用代码解析xml的这些语言,都是要用到解释器模式.

 

  • 创建型模式
  1. 工厂模式(factory):一般有四个角色,产品,创建者,具体的产品,具体的创建者这个四个,他们两两来保持一致性.
  2. 单例模式(single):是生成一个实例,例如xxxDataSource,如果是类的话就设置成 static并在赋值的时候就new出来.对应一个getInstance(),让外界通过这个方法调用它.
  3. 原型模式(prototype):①对象的种类繁多,无法集中到一个类.②难以根据类生成实例时③想解耦框架与生成实例时.在需要具体类时候,不是new创建,而是用clone的方法进行克隆,父类中要继承Cloneable声明可以使用clone方法,算是一种规定,不然会报错.相关的模式:享元模式,备忘录模式,组合模式,装饰者模式和命令模式.
  4. 建造者模式(builder):将复杂的结构一点一点的建造起来.相关的模式:抽象工厂模式,模板模式,组合模式,就是先将方法定义到抽象类中,然后在具体类中去实现.
  5. 抽象工厂模式(abstract factory):工厂模式加工的是具体的类,那么抽象工厂加工的就是抽象的类了.

 

     参考书籍为:图解设计模式 作者:[日] 结城浩

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值