设计模式之 适配器模式

来源:互联网 发布:c语言代码大全下载 编辑:程序博客网 时间:2024/06/09 23:32

适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。

主要分为三种:

1.类的适配器模式

2.对象的适配器模式

3.接口的适配器模式


1.类的适配器模式

核心思想就是:

有一个Source类,拥有一个方法,有一个目标接口Targetable

通过Adapter类,将Source的功能扩展到Targetable里。

其实是扩展到Targetable的实现类Adapter里,Targetable只是一个接口!

打个不恰当的比方:

两个国家,AB国类似于英格兰,苏格兰等

A国女王管理A国,有一个管理方法methodA,

B国男王也想管理A国,有一个虚拟的方法methodA,以为没有权利所以是虚拟的嘛!

那B国国王怎样能管理A国呢,就是跟A女王生一个孩子Adapter,就间接管理到了A国。

上代码:

public class KingA {public void ManageStateA(){System.out.println("Manage State A");}}

public interface KingB {public void ManageStateA();}


public class Adapter extends KingA implements KingB {}

测试代码:

public static void main(String[] args) {KingB mKingB = new Adapter();mKingB.ManageStateA();}


打印结果

Manage State A

是不是KingB 管理到了A国?


2.对象的适配器模式

如果B国国王娶不到A国女王怎么办?

如果B国国王的儿子一直努力努力,南征北战当上大帝国皇帝(类似于英国女王, AB国类似于英格兰,苏格兰等)

那A国这也就是B国国王的儿子管辖下的一个元素而已,这样子B国国王也能管理到A国!但是得通过A国国王的传达!不能直接下命令

假设这个儿子叫Wrapper吧!

public class Wrapper implements KingB {private KingA mKingA;public Wrapper(KingA mKingA){this.mKingA = mKingA;}@Overridepublic void ManageStateA() {mKingA.ManageStateA();}}

测试代码:

public static void main(String[] args) {KingA mKingA = new KingA();KingB mKingB = new Wrapper(mKingA);mKingB.ManageStateA();}

3.接口的适配器模式

接口的适配器是这样的:有时我们写的一个接口中有多个抽象方法,当我们写该接口的实现类时,必须实现该接口的所有方法,这明显有时比较浪费,因为并不是所有的方法都是我们需要的,有时只需要某一些,此处为了解决这个问题,我们引入了接口的适配器模式,借助于一个抽象类,该抽象类实现了该接口,实现了所有的方法,而我们不和原始的接口打交道,只和该抽象类取得联系,所以我们写一个类,继承该抽象类,重写我们需要的方法就行。

public interface Sourceable {           public void methodA();      public void methodB();  }  

实现虚拟类:

public abstract class Wrapper implements Sourceable{            public void methodA(){}      public void methodB(){}  }  

public class SourceSubA extends Wrapper {      public void methodA(){          System.out.println("the sourceable interface's first SubA!");      }  } 

public class SourceSubB extends Wrapper {      public void methodB(){          System.out.println("the sourceable interface's second SubB!");      }  } 

测试代码:

public static void main(String[] args) {          Sourceable sourceA = new SourceSubA();          Sourceable sourceB = new SourceSubB();                    sourceA.methodA();          sourceB.methodB();          sourceA.methodA();          sourceB.methodB();  } 

测试输出:

the sourceable interface's first Sub1!
the sourceable interface's second Sub2!

达到了我们的效果!

讲了这么多,总结一下三种适配器模式的应用场景:

类的适配器模式:  当希望将一个类转换成满足另一个新接口的类时,可以使用类的适配器模式,创建一个新类,继承原有的类,实现新的接口即可。

对象的适配器模式: 当希望将一个对象转换成满足另一个新接口的对象时,可以创建一个Wrapper类,持有原类的一个实例,在Wrapper类的方法中,调用实例的方法就行。

接口的适配器模式: 当不希望实现一个接口中所有的方法时,可以创建一个抽象类Wrapper,实现所有方法,我们写别的类的时候,继承抽象类即可。




0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 聚星输了很多钱怎么办 弹力运动裤被烟烧了个洞怎么办 生完宝宝胯宽怎么办 黑色纯棉裤子洗的发白怎么办 金盾保险柜密码忘了怎么办 装修好的房子漏水怎么办 刚装修的房子墙面开裂怎么办 刚装修的房子有味道怎么办 代销产品规格填写不完整怎么办 我的信息被泄露怎么办 进入不良网站手机发信息怎么办 发不良信息被停机了怎么办 手机qq登录显示被冻结怎么办 qq账户被冻结了怎么办 qq钱包账户被永久冻结怎么办 怎么办转让费还没给我 收钱吗不能抵用红包怎么办 红包抵扣被关了怎么办 天猫客户给差评怎么办 淘宝闪电退款有纠纷怎么办呀 手机屏幕右下角出现彩色点怎么办 在超市买到假货怎么办 天猫超市多发货怎么办 天猫中不小心取消退款了怎么办 天猫超市写错了怎么办 二维码收付款不到红包怎么办 天猫优惠劵过期了怎么办 天猫购物津贴用不完怎么办 天猫上买的大件东西实物不符怎么办 天猫上面料成分与实物不符怎么办 闲鱼发货与实物不符怎么办 天猫超市买贵了怎么办 天猫超市里购买的东西退货怎么办 淘宝店上传的图片不清楚怎么办 微信图片打印出来不清楚怎么办 微信图片打印不清楚怎么办 淘宝上传商品视频不清楚怎么办 手机安装器没了怎么办 我不做直播换工作怎么办 天猫发票被投诉怎么办 天猫机顶盒闪退怎么办