深入浅出Java设计模式之适配器模式
通常,客户类(clients of class)通过类的接口访问它提供的服务。有时,现有的类(existing class)可以提供客户类的功能需要,但是它所提供的接口不一定是客户类所期望的。这是由于现有的接口太详细或者缺乏详细或接口的名称与客户类所查找的不同等诸多不同原因导致的。
在这种情况下,现有的接口需要转化(convert)为客户类期望的接口,这样保证了对现有类的重用。如果不进行这样的转化,客户类就不能利用现有类所提供的功能。适配器模式(Adapter Pattern)可以完成这样的转化。适配器模式建议定义一个包装类,包装有不兼容接口的对象。这个包装类指的就是适配器(Adapter),它包装的对象就是适配者(Adaptee)。适配器提供客户类需要的接口,适配器接口的实现是把客户类的请求转化为对适配者的相应接口的调用。换句话说:当客户类调用适配器的方法时,在适配器类的内部调用适配者类的方法,这个过程对客户类是透明的,客户类并不直接访问适配者类。因此,适配器可以使由于借口不兼容而不能交互的类可以一起工作(work together)。
在上面讨论的接口:
(1) 不是指在JAVA编程语言中接口的概念,虽然类的接口可以通过JAVA借扩来定义。
(2) 不是指由窗体和GUI控件所组成的GUI应用程序的用户接口。
(3) 而是指类所报漏的,被其他类调用的编程接口,
类适配器(Class Adapter)VS对象适配器(Object Adapter)
适配器总体上可以分为两类??类适配器(Class Adapter)VS对象适配器(Object Adapter)
类适配器:
类适配器是通过继承类适配者类(Adaptee Class)实现的,另外类适配器实现客户类所需要的接口。当客户对象调用适配器类方法的时候,适配器内部调用它所继承的适配者的方法。
对象适配器:
对象适配器包含一个适配器者的引用(reference),与类适配器相同,对象适配器也实现了客户类需要的接口。当客户对象调用对象适配器的方法的时候,对象适配器调它所包含的适配器者实例的适当方法。
下表是类适配器(Class Adapter)和对象适配器(Object Adapter)的详细不同:
补充:
类适配器(Class Adapter) 对象适配器(Object Adapter)
基于继承概念 利用对象合成
只能应用在适配者是接口,不能利用它子类的接口,当类适配器建立时,它就静态地与适配者关联 可以应用在适配者是接口和它的所有子类,因为适配器是作为适配者的子类,所以适配器可能会重载适配者的一些行为。
注意:在JAVA
相关文档:
凌宇 在www.360doc.com中转帖【IEEE浮点数表示法】,经过仔细研究,终于有点心得了。
float转十六进制:
16进制浮点数的表示方法,根据IEEE的标准,分为32位和64位两种,参数分别如下:
符号位
指数位
指数偏移量
尾数位
32位
1[31]
8[23-30]
23[0-22]
127
64位
1[63]
11[52-62]
52 ......
Java Annotation注释语法(一)
关键字: java annotation注释
JAVA从J2SE5开始提供名为annotation(注释,标注)的功能。Java的annotation,可以附加在package, class, method, field等上面,相当于给它们添加了额外的辅助信息。附加在package, class, method, field等上的Annotation,如果没有外部解析工具等对其加以解 ......
Lombok是一个开源项目,可以用来消除Java代码的冗长
详细介绍参看http://www.ibm.com/developerworks/opensource/library/os-lombok/index.html
下面介绍Lombok如何消除Java代码的冗长。
1. 首先去http://projectlombok.org/. 下载lombok.jar 包
2. & ......
public class chengfa {
public static void main(String[] args)
{
model md=new model();
md.method();
}
}
class model
{
public int count=0;
public int[]b=new int[100];
public void me ......
浅析Java web程序之客户端和服务器端交互原理
近来一直在思考一个疑问,为什么在用struts框架开发的时候FormBean都须要序列化,即实现Java.io.Serializable接口,本着勤学好问的精神我Google了下对象序列化方面的文章,虽然大体明白了如何做,但是还是没有搞清楚为什么要这样做;结尾我想处理一个疑问要找疑问的根源和本质 ......