码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式总结

时间:2015-12-24 00:30:19      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:

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

设计模式总结

标签:

原文地址:http://www.cnblogs.com/amongv587/p/5071724.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!