设计模式总结

1、工厂方法和抽象工厂的区别。
1.1为什么抽象工厂叫做抽象工厂。
2、介绍适配器模式、代理模式
3、找出现实中适配器模式、代理模式的用途。
4、适配器模式、代理模式能解决什么问题?
5、适配模式和代理模式合适的例子讲解。
 
问题1
抽象工厂的意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
工厂方法的意图:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使得一个类的实例化延迟到了其子类。
 
 
两者的区别:
1、从意图上来说,抽象工厂的目的是创建一系列相关或者相互依赖的对象,也就是说我们需要的不仅仅是一个产品对象,我们需要多个产品,而且产品之间是有依赖的。比如说我们要开发一套UI控件,那么会需要按钮、输入框、等等界面控件。如果要支持用户自定义界面风格,那么每一个风格的按钮都不一样,但是同一个风格内的控件要一致,这样开发出来的控件才不会不协调。那我们使用抽象工厂模式就可以非常好地解决这个问题。应用程序只对抽象的控件接口编程,同一个风格的控件实例化交给一个风格控件工厂去做。这也是为什么叫做抽象工厂模式的原因,抽象是指使用的是抽象工厂的抽象产品。
      工厂方法的意图旨在让子类来实例化哪一个类。它的意思是产品的实例化不是自己来做,而是交于一个代工厂来做,也就是让工厂生成的方式来获取具体的产品,不同的工厂产生同类而不同质的产品。它可以看成是抽象工厂的一个退化,当抽象工厂我们只需要一种产品时就是工厂方法。当我们把抽象工厂也去掉,而只是提供一个统一的工厂来创建产品时,就变成了简单工厂。
 
最重要和最直观的区别在于:一种产品还是一系列相关或相互依赖的产品。
Factory Method UML
 
Abstract Factory UML
 
 
适配器模式的介绍:
      适配器模式属于结构型模式,结构型模式描述了如何将类或者对象结合起来形成更大的结构,就像搭积木,可以通过简单积木的组合形成复杂的、工更加强大的结构。
意图:将一个类的接口转换为客户希望的另外一个接口。Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类也可以一起工作。
 
假设已有一个软件系统,你希望它能够和一个新的厂商类库搭配使用,但是这个新的厂商所设计出来的接口,不同于旧厂商的接口:
 
如果你不想改变现有的代码,解决这个问题(而且你也不能改变厂商的代码)。一般很容易想到中间加一层,将新厂商类接口转换为你所期望的接口
 
这样就可以正常工作了。
 
适配器工作方式如下:
1、客户通过目标接口调用适配器的方法对适配器发出请求。
2、适配器使用被适配器接口把请求转换为被适配器的一个或者多个调用接口。
3、客户接收到调用的结果,但并不需要了解到这一切是因为适配器在做转换作用。
 
适配器模式的结构如下所示。实现的时候有两种方式:
1、类适配器:
2、对象适配器:
 
大多数情况两种方式都是可以用的,但是比如像Java不支持多重继承也就不支持类适配器。
 
关联模式:
外观模式跟适配器模式想法上有点类似,但是外观模式是将复杂的接口调用封装成更简单的接口,它们的目的是不一样的。
 
 
代理模式:
代理模式的意图:为其他对象提供一种代理以控制这个对象的访问
 
其结构定义如下:
 
 
 
比如我们公司使用的网络代理
浏览器发起一个http请求,首先会到代理服务器,在真正地区向服务器请求实际内容之前,代理服务器首先会检查你所访问的网址是否允许访问。比如是不是
视频网站、新闻网站等。允许访问它才会向真正的服务器请求实际内容再返回。
 
常见的代理模式有
 
  • 远程(Remote)代理:为一个位于不同的地址空间的对象提供一个本地 的代理对象,这个不同的地址空间可以是在同一台主机中,也可是在 另一台主机中,远程代理又叫做大使(Ambassador)。
  • 虚拟(Virtual)代理:如果需要创建一个资源消耗较大的对象,先创建一个消耗相对较小的对象来表示,真实对象只在需要时才会被真正创建。
  • Copy-on-Write代理:它是虚拟代理的一种,把复制(克隆)操作延迟 到只有在客户端真正需要时才执行。一般来说,对象的深克隆是一个 开销较大的操作,Copy-on-Write代理可以让这个操作延迟,只有对象被用到的时候才被克隆。
  • 保护(Protect or Access)代理:控制对一个对象的访问,可以给不同的用户提供不同级别的使用权限。
  • 缓冲(Cache)代理:为某一个目标操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果。
  • 防火墙(Firewall)代理:保护目标不让恶意用户接近。
  • 同步化(Synchronization)代理:使几个用户能够同时使用一个对象而没有冲突。
  • 智能引用(Smart Reference)代理:当一个对象被引用时,提供一些额外的操作,如将此对象被调用的次数记录下来等。

 

 

posted @ 2015-12-23 23:57  amongv587  阅读(170)  评论(0编辑  收藏  举报