适配器模式将一个接口转换成客户希望的另外一个接口。它使得原来由于接口不兼容而不能在一起工作的那些类可以一起工作。
包com.bjpowernode.adapter;/* * * PS2接口,圆口 * @author伊森 * */公共接口PS2Port { 公共空间workWithPS2 (); } >之前
, USBPort
包com.bjpowernode.adapter;/* * * USB接口,U口 * @author伊森 * */公共接口USBPort { 公共空间workWithUSB (); } >之前PS2ToUSB
包com.bjpowernode.adapter;/* * *对象适配器 *将PS2接口装换成USB接口 *所以此类类型是USB接口(实现USBPort) +成员变量ps2Port * @author伊森 * */公共类PS2ToUSB实现USBPort { 私人PS2Port PS2Port; 公共PS2ToUSB (PS2Port PS2Port) { 这一点。ps2Port=ps2Port; } @Override 公共空间workWithUSB () { System.out.println(“转换的关键在这里,本来是"); ps2Port.workWithPS2 (); System.out.println(“经过你的转换,现在是USB工作中”); } } >之前TestAdapter
包com.bjpowernode.adapter;/* * * 测试类 *客户端 * @author伊森 * */公开课TestAdapter { 公共静态void main (String [] args) {//我现在有一个PS2接口 PS2Port PS2Port=new PS2Port () { @Override 公共空间workWithPS2 () { System.out.println (“PS2工作中”); } };//但是我需要的是一个USB接口啊,对我(客户端)来说,我只认识USB接口//经过PS2ToUSB的转换,PS2接口变成了USB接口 USBPort ps2ToUsbPort=new PS2ToUSB (ps2Port); ps2ToUsbPort.workWithUSB (); } } >之前
上述的适配器就是对象适配器。再看看类适配器。
PS2ToUSB,只是简单模拟一下。因为java不允许多继承,所以java中没有类模式的代码,只有思想。
包com.bjpowernode.adapter;/* * *类适配器 * @author伊森 * */公共类PS2ToUSB实现USBPort PS2Port {//重写workWithUSB,把工作交给workWithPS2 @Override 公共空间workWithUSB () { workWithPS2 (); } } >之前差别就是:对象适配器实现了客户端想要的接口(USB),在内部有一个被适配对象(PS2)的引用,通过组合实现适配功能。类适配器实现了客户端想要的接口(USB)和被适配对象接口(PS2),通过继承来实现适配功能。
1。希望复用一些现存的类,但是接口又与复用环境要求不一致。
2。其实适配器模式有点无奈之举,在前期设计的时候,我们就不应该考虑适配器模式,而应该考虑通过重构统一接口。
它们都可以用来包装对象,本质区别在于
1。适配器模式:将一个接口转换成另外一个接口。
2。装饰者模式:不改变接口,只加入职责。
Java适配器模式_动力节点Java学院整理