类关系图

类角色说明
 目标(Target)角色:这是客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。
源(Adaptee)角色:需要适配的类。
适配器(Adapter)角色:通过在内部包装(Wrap)一个Adaptee对象,把源接口转换成目标接口。

意图
将一个类的接口转换成客户希望的另外一个接口。Adapter 模式使得原本由于接口不兼容而不能
一起工作的那些类可以一起工作。

适用性
1、 系统需要使用现有的类,而此类的接口不符合系统的需要。
2、 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。这些源类不一定有很复杂的接口。
3、 (对对象适配器而言)在设计里,需要改变多个已有子类的接口,如果使用类的适配器模式,就要针对每一个子类做一个适配器,而这不太实际

泡妞的例子
ADAPTER —在朋友聚会上碰到了一个美女Sarah,从香港来的,可我不会说粤语,她不会说普通话,只好求助于我的朋友kent了,他作为我和Sarah之间的Adapter,让我和Sarah可以相互交谈了(也不知道他会不会耍我)

实例代码

using System;
using System.Collections;

public class MM
{
    
public void 说第一句话()
    
{
        Console.WriteLine(
"好中意徐志摩哦!");
    }

    
public void 说第二句话()
    
{
        Console.WriteLine(
"我静静鸡散水,就好似我静静鸡咁踩嚟; 我拍拍箩柚, 一啲云都毋拎,嫌重得滞。");
    }

}

public interface Friend
{
    
void 回答();
}


public class Kent:Friend
{
    
private MM Sarah=new MM();
    
public void 回答()
    
{
        Console.WriteLine(
"Sarah刚才说了两句话!");
        Sarah.说第一句话();
        Sarah.说第二句话();
        Console.WriteLine(
"意思是说:");
        Console.WriteLine(
"她好喜欢徐志摩的!");
        Console.WriteLine(
"悄悄的我走了,正如我悄悄的来,我挥一挥衣袖,不带走一片云彩。");
        Console.WriteLine(
"你没戏啦,刚见面就说要走,让我上吧!");
    }

}

public class 聚会
{
    
public static void Main()
    
{
        Kent kent
=new Kent();
        Console.WriteLine(
"嘿,kent,哥儿们,她说啥啊,是不是说要我送他回家?");
        kent.回答();
        Console.WriteLine(
"我靠,臭小子!朋友妻也敢欺!!!");
    }

}

适配器模式:把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口原因不匹配而无法一起工作的两个类能够一起工作。适配类可以根据参数返还一个合适的实例给客户端。

Adapter模式在实现时有以下这些值得注意的地方:
1、 目标接口可以省略,模式发生退化。但这种做法看似平庸而并不平庸,它可以使Adaptee不必实现不需要的方法。其表现形式就是父类实现缺省方法,而子类只需实现自己独特的方法。这有些像模板(Template)模式。
2、 适配器类可以是抽象类。
3、 带参数的适配器模式。使用这种办法,适配器类可以根据参数返还一个合适的实例给客户端。

说明:
其实说白了就是将一个类的一个或多个方法的组合换个说法,让客户端比较容易接受

posted on 2006-12-30 00:07  十分之七  阅读(218)  评论(0)    收藏  举报