java设计模式之适配器模式

java设计模式之适配器模式

设配器模式定义:

  • 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法工作的两个类能在一起工作

适配器模式的使用场景:

  • 系统需要使用现有的类,而此类的接口不符合系统的需要,即接口不兼容
  • 需要建立统一的输出接口,而输入端的类型不可预知
  • 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大联系的类,包括一些可能在将来进入的类一起工作

适配器模式UML图:

这里写图片描述

  • Target:目标角色,也就是期待的接口
  • Adaptee: 现在需要适配的接口
  • Adapter:适配器角色,将就旧接口转换成目标接口

适配器模式满足的前提:

  • 适配器对象必须实现原有接口(原有接口的实现类)
  • 适配器对象必须要有目标接口的引用;
  • 对适配器原有接口方法的调用被委托给目标接口实例的特定方法

    适配器具有的特点:

    • 1.必须实现旧接口
    • 2.适配器对象中持有对新接口的引用,当调用旧接口时,
    • 将这个调用委托给实现新接口的对象来处理,也就是在适配器对象中组合一个新接口。

适配器模式的简单实例:

  • 场景: 一家旅店(client)的插座是两孔插座,只能使用两孔插头(Target),现在客人的充电器是三孔插头(Adaptee),如何实现客户手机充电?
  • 方法: 适配器(Adapter),也就是生活中转接头应运而生,他必须有三孔插头的插孔(实现Adaptee),又要有两孔的插头(有Target的引用),这样手机就不是直接充电,而是依靠转接头来实现充电这一行为.

适配器模式案例实现:

  • Target:
    public interface OldSocket {
            void RoundCharge();
        }
  • Adaptee:
public interface NewSocket {
            void CircleCharge();
        }
  • Client:
public class Hotel {
            private OldSocket mOldSocket;

            public Hotel() {
            }

            public void setAdapter(OldSocket oldSocket) {
                mOldSocket = oldSocket;
            }

            //拥有自己的行为充电:
            public void charge() {
                mOldSocket.RoundCharge();
            }
        }
  • Adapter:
public class SocketAdapter implements OldSocket {

            private NewSocket mNewSocket;

            public SocketAdapter(NewSocket newSocket) {
                mNewSocket = newSocket;
            }

            @Override
            public void RoundCharge() {
                mNewSocket.CircleCharge();
            }
        }
  • 调用充电:
       NewSocket newSocket = new NewSocket() {
            @Override
            public void CircleCharge() {
                Log.d("TAG", "圆形插口充电");
            }
        };

        Hotel hotel = new Hotel();

        SocketAdapter adapter = new SocketAdapter(newSocket);

        hotel.setAdapter(adapter);
        hotel.charge();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值