【设计模式】—— 适配器模式Adapter

  模式意图

  如果已经有了一种类,而需要调用的接口却并不能通过这个类实现。因此,把这个现有的类,经过适配,转换成支持接口的类。

  换句话说,就是把一种现有的接口编程另一种可用的接口。

  模式结构

  【类的适配器】

  Target 目标接口

  Adaptee 现有的类

  Adapter 中间转换的类,即实现了目标接口,又继承了现有的类。

 1 package com.xingoo.test1;
 2 interface Target{
 3     public void operation1();
 4     public void operation2();
 5 }
 6 class Adaptee{
 7     public void operation1(){
 8         System.out.println("operation1");
 9     }
10 }
11
12 class Adapter extends Adaptee implements Target{
13     public void operation2() {
14         System.out.println("operation2");
15     }
16 }
17
18 public class test {
19     public static void main(String[] args){
20         Target tar = new Adapter();
21         tar.operation1();
22         tar.operation2();
23     }
24 }

  【对象的适配器】

  与上面不同的是,这次并不是直接继承现有的类,而是把现有的类,作为一个内部的对象,进行调用。

 1 package com.xingoo.test2;
 2
 3 interface Target{
 4     public void operation1();
 5     public void operation2();
 6 }
 7
 8 class Adaptee{
 9     public void operation1(){
10         System.out.println("operation1");
11     }
12 }
13
14 class Adapter implements Target{
15     private Adaptee adaptee;
16     public Adapter(Adaptee adaptee){
17         this.adaptee = adaptee;
18     }
19     public void operation1() {
20         adaptee.operation1();
21     }
22
23     public void operation2() {
24         System.out.println("operation2");
25     }
26
27 }
28 public class test {
29     public static void main(String[] args){
30         Target tar = new Adapter(new Adaptee());
31         tar.operation1();
32         tar.operation2();
33     }
34 }

  使用场景

  1 想使用一个已经存在的类,但是它的接口并不符合要求

  2 想创建一个可以复用的类,这个类与其他的类可以协同工作

  3 想使用已经存在的子类,但是不可能对每个子类都匹配他们的接口。因此对象适配器可以适配它的父类接口。(这个没理解,以后慢慢琢磨)

  生活中的设计模式

  俗话说,窈窕淑女君子好逑,最近看跑男,十分迷恋Baby。

  但是,如果桃花运浅,身边只有凤姐,那么也不需要担心。

  只需要简单的化妆化妆,PS一下,美女凤姐,依然无可替代!

  

  虽然,没有AngleBaby,但是我们有凤姐,所以依然可以看到AngleBaby甜美的笑。

 

 1 package com.xingoo.test3;
 2 interface BeautifulGirl{
 3     public void Smiling();
 4 }
 5 class UglyGirl{
 6     public void Crying(){
 7         System.out.println("我在哭泣...");
 8     }
 9 }
10 class ApplyCosmetics implements BeautifulGirl{
11     private UglyGirl girl;
12     public ApplyCosmetics(UglyGirl girl){
13         this.girl = girl;
14     }
15     public void Smiling() {
16         girl.Crying();
17     }
18 }
19 public class test {
20     public static void main(String[] args){
21         BeautifulGirl girl = new ApplyCosmetics(new UglyGirl());
22         girl.Smiling();
23     }
24 }

  运行结果

我在哭泣...

 

本文转自博客园xingoo的博客,原文链接:【设计模式】—— 适配器模式Adapter,如需转载请自行联系原博主。

时间: 2024-11-08 20:51:18

【设计模式】—— 适配器模式Adapter的相关文章

解读设计模式----适配器模式(Adapter Pattern)

在金庸笔下,三大神功都是难得之宝,多少人为得到他而......,仔细的分析下这三大神功,还是北冥较好,呵呵.我们从软件设计的角度来看,这不知算不算得上是一种复用(功力复用)的思想,只不过有点残忍罢.而在软件设计领域里,"复用"在某些时候也会出现很多问题,比如平台不兼容,开发语言不同或是接口不同等多种原因,弄得不好会不会出现既浪费了别人的现有资源,而自己的系统又无法完成呢?这有点像吸星----损人又损己. 企图将设计做好,就能够一劳永逸地坐享其成,这样的愿望就好上面所提到的吸星神功一般,

设计模式(五)适配器模式Adapter(结构型)

设计模式(五)适配器模式Adapter(结构型) 1. 概述:          接口的改变,是一个需要程序员们必须(虽然很不情愿)接受和处理的普遍问题.程序提供者们修改他们的代码;系统库被修正;各种程序语言以及相关库的发展和进化.         例子1:iphone4,你即可以使用UBS接口连接电脑来充电,假如只有iphone没有电脑,怎么办呢?苹果提供了iphone电源适配器.可以使用这个电源适配器充电.这个iphone的电源适配器就是类似我们说的适配器模式.(电源适配器就是把电源变成需要

乐在其中设计模式(C#) - 适配器模式(Adapter Pattern)

原文:乐在其中设计模式(C#) - 适配器模式(Adapter Pattern)[索引页][源码下载] 乐在其中设计模式(C#) - 适配器模式(Adapter Pattern) 作者:webabcd 介绍 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 示例 有一个Message实体类,某个类对它的操作有Insert()和Get()方法.现在需要把这个类转到另一个接口,分别对应Add()和Select()方法. Mess

初识Java设计模式适配器模式_java

[正文] 我们知道,Android中最重要也是最难用的UI控件就是ListView列表控件,而要想灵活运用它,则必须要用到适配器adapter,所以,我觉得还是很有必要来学习一下Java当中的适配器模式(不管以后能不能用到),毕竟Java语言是Android开发很重要的一个基础.  完全了解适配器模式,有很多知识要学习,例如:适配器模式有类的适配器模式和对象的适配器模式两种不同的形式.但作为初学者,我就简单学习一下配器模式入门知识吧,以后会不断完善.希望奋斗在码农路上的童鞋们莫吐槽→_→  一.

.NET设计模式-适配器模式(Adapter Pattern)

适配器模式(Adapter Pattern) --.NET设计模式系列之八 Terrylee,2006年2月 概述 在软件系统中,由于应用环境的变化,常常需要将"一些现存的对象"放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的.那么如何应对这种"迁移的变化"?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口?这就是本文要说的Adapter 模式. 意图 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口

温故而知新:设计模式之适配器模式(Adapter)

借用terrylee的原话: Adapter模式主要应用于"希望复用一些现存的类,但是接口又与复用环境要求不一致的情况",在遗留代码复用.类库迁移等方面非常有用. 适配器模式再次体现了"面向接口编程,而非面向实现编程"这一精神. 场景: 有一个基于数据库的系统,里面的数据库操作就拿最常用的查询来说,主要是用SqlHelper类里的QueryData(string sql)这个方法来处理的,后来意外发现该方法实现上性能并不是最好(或者不能满足新的需要),而这时正好有一

[Head First设计模式]身边的设计模式——适配器模式

系列文章 [Head First设计模式]山西面馆中的设计模式--装饰者模式 [Head First设计模式]山西面馆中的设计模式--观察者模式 [Head First设计模式]山西面馆中的设计模式--建造者模式 [Head First设计模式]饺子馆(冬至)中的设计模式--工厂模式 [Head First设计模式]一个人的平安夜--单例模式 [Head First设计模式]抢票中的设计模式--代理模式 [Head First设计模式]面向对象的3特征5原则 [Head First设计模式]鸭子

PHP设计模式——适配器模式

声明:本系列博客参考资料<大话设计模式>,作者程杰.           适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的(适配器模式要解决的核心问题).一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中.         类图:               待适配(ForeignPlayer)角色:此角色的接口规则内部的接口规则不一致,但内部需要调用该角色的方法功能.        内部接口(IPlayer)角色:

hand first设计模式 -适配器模式

适配器模式 :将一个类的接口,转换成客户期望的另一个接口.适配器上原本接口不兼容的类可以合作无间. 项目比较旧的代码,迭代采用Enumeration Java代码 public class EnumerationTest { public Enumeration getEnum(Vector list){ Enumeration e = list.elements(); return e; } } 项目比较旧的代码,迭代采用Iterator Java代码 public class Iterato