设计模式之适配器模式的学习思考

适配器模式是设计模式里的结构型模式一种

其功能如其名字一样——适配,主要用于接口适配,通过接口转换,将一个类插在另一个类中

打个比方,美国电器 110V,中国 220V,就要有一个适配器将 110V 转化为 220V。

优点:

  1. 可以让两个没有关联的类一起运行
  2. 提高了类的复用
  3. 比较灵活

缺点:

  1. 过多地使用适配器,会让系统非常零乱
  2. 由于 JAVA 至多继承一个类,所以至多只能适配一个适配者类,而且目标类必须是抽象类

思路:

  1. 创建两个接口和其实现类,分别生成不同的对象
  2. 创建适配器类,实现的接口是想要有新功能的接口,一般是低级接口,其功能是实现新功能(方法实现)
  3. 低级接口的另一个实现类内部声明适配器类对象,方法实现新功能
    4.public类main方法实现整个调用

具体设计:

  1. 我们有手机和平板两个电子设备,手机可以打电话,平板可以上网和玩游戏,现在我们想手机也可以上网和玩游戏,这时就需要一个适配器来给手机增加新功能
  2. 两个接口,一个是MobliePhone,另一个是TabletsT
  3. 先实现Tablets接口,分别是NetPlayer和GamePlayer两个类实现各自功能
  4. 创建适配类实现MobilePhone接口,其功能是隐继承Tablets的两个功能,通过构造类返回对象和方法play调用各自功能
  5. 创建MobilePlayer类实现MobilePhone接口,其功能也是隐继承适配类和实现接口方法
  6. 最后public类AdapterPatternDemo来实现main方法

具体代码:

interface MobilePhone{
    void play(String functionType, String dosh);
}

interface Tablets{
    void playNet(String dosh);
    void playGame(String dosh);
}

class NetPlayer implements Tablets{

    @Override
    public void playNet(String dosh) {
        // TODO Auto-generated method stub
        System.out.println("Playing net Name:"+dosh);
    }

    @Override
    public void playGame(String dosh) {
        // TODO Auto-generated method stub

    }
}

class GamePlayer implements Tablets{

    @Override
    public void playNet(String dosh) {
        // TODO Auto-generated method stub

    }

    @Override
    public void playGame(String dosh) {
        // TODO Auto-generated method stub
        System.out.println("Playing Game Name:"+dosh);
    }

}

class Adapter implements MobilePhone{
    Tablets tablets;            //接口型

    public Adapter(String functionType) {

        if(functionType=="net"){
            tablets=new NetPlayer();
        }else if(functionType=="game"){
            tablets=new GamePlayer();
        }
    }

    public void play(String functionType,String dosh){
        if(functionType=="net"){
            tablets.playNet(dosh);
        }else if(functionType=="game"){
            tablets.playGame(dosh);
        }
    }
}

class MobilePlayer implements MobilePhone{

    Adapter adapter;
    public void play(String functionType, String dosh) {
        if(functionType=="call"){
            System.out.println("Playing call Name:"+dosh);
        }else if(functionType=="net"){
            System.out.println("Playing net Name:"+dosh);
        }else if(functionType=="game"){
            System.out.println("Playing game Name:"+dosh);
        }
        else{
            System.out.println(dosh);
        }
    }

}
public class AdapterPatternDemo {

    public static void main(String[] args) {
        MobilePlayer mobilePlayer=new MobilePlayer();
        mobilePlayer.play("call", "打给李明");
        mobilePlayer.play("net", "我在上网");
        mobilePlayer.play("game", "游戏很好玩");
        mobilePlayer.play("sor", "sorry");
    }

}

输出如下:

Playing call Name:打给李明
Playing net Name:我在上网
Playing game Name:游戏很好玩
sorry

总结:针对接口的编程,非常具有结构型,严谨的构造顺序

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值