常用设计模式-适配器模式

1、适配器使用场景:

 1、系统需要使用现有的类,而此类的接口不符合系统的需要。

2、想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。

3、通过接口转换,将一个类插入另一个类系中。(比如老虎和飞禽,现在多了一个飞虎,在不增加实体的需求下,增加一个适配器,在里面包容一个虎对象,实现飞的接口。)

 

2、生活场景

目前只有适配二脚插头的插座,但是买回来的电器是三脚的插头。

那如果让三脚插头可以插在二脚的插座上呢? 这时候就可以用适配作为桥梁,适配器连接二脚插头和三脚的插座。

 

3、代码实现

/**
 * 两脚插座接口(目标接口)
 */
public interface TwoPinSocket {
    //两脚
    public void towPinConnect();
}

/**
 * 两脚插座实现(目标)
 */
public class TwoPinSocketImpl implements TwoPinSocket {
    @Override
    public void towPinConnect() {
        System.out.println("我是两脚插座");
    }
}


/**
 * 第一种方式:通过继续获的被适配者的方法,从而转成通用方法
 * 适配器目的:两脚插座适配三脚插头。插座是目标,插头是被适配。
 * 适配器需要实现目标接口
 */
public class adapter extends ThreePinPlug implements TwoPinSocket {
    @Override
    public void towPinConnect() {
        super.threePinPlug();
    }
}


/**
 * 第二种方式:注入被适配对象方式实现适配器
 * 适配器目的:两脚插座适配三脚插头。插座是目标,插头是被适配。
 * 适配器需要实现目标接口
 */
public class adapter  implements TwoPinSocket {
    
    private ThreePinPlug threePinPlug;
    
    public void ThreePinPlug(ThreePinPlug threePinPlug){
        this.threePinPlug = threePinPlug;
    }
    
    @Override
    public void towPinConnect() {
        threePinPlug.threePinPlug();
    }
}

 

4.适配器模式(Adapter)包含以下主要角色。

  1. 目标(Target)接口:当前系统业务所期待的接口,它可以是抽象类或接口。
  2. 适配者(Adaptee)类:它是被访问和被适配的现存组件库中的组件接口。
  3. 适配器(Adapter)类:它是一个转换器,通过继承或引用适配者的对象,把适配者接口转换成目标接口,让客户按目标接口的格式访问适配者。
package adapter;
//目标接口
interface Target
{
    public void request();
}
//适配者类
class Adaptee
{
    public void specificRequest()
    {       
        System.out.println("适配者中的业务代码被调用!");
    }
}
//类适配器类
class ClassAdapter extends Adaptee implements Target
{
    public void request()
    {
        specificRequest();
    }
}
//客户端代码
public class ClassAdapterTest
{
    public static void main(String[] args)
    {
        System.out.println("类适配器模式测试:");
        Target target = new ClassAdapter();
        target.request();
    }
}

 

posted @ 2019-01-05 23:24  N神3  阅读(210)  评论(0编辑  收藏  举报