结构型模式-适配器模式

适配器模式用于适配两个不同接口,结合两个独立接口的功能。

何时使用:
1. 系统需要使用现有的类,而此类的接口不符合系统的需要。
2. 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。
3. 通过接口转换,将一个类插入另一个类系中。(比如老虎和飞禽,现在多了一个飞虎,在不增加实体的需求下,增加一个适配器,在里面包容一个虎对象,实现飞的接口。)

如何解决:继承或依赖(推荐)。

适配器不是在详细设计时添加的,而是解决正在服役的项目的问题

举个栗子,中国和英国使用了不同类型的插座标准。创建两个接口表示中英不同的插座,创建两个实现类,实现中英不同插座的充电功能。

//创建中英不同标准的插座
interface ukSocket{
    public function ukcharge();    
}
interface cnSocket{
    public function cncharge();
}
//实现类,实现中英不同插座的充电功能
class cnCharger implements cnSocket{
    public function cncharge(){
        echo 'charging using China type charger.<br>';
    }
}
class ukCharger implements ukSocket{
    public function ukcharge(){
        echo 'Charging using UK type charger.<br>';
    }
}

去英国旅游,想给手机充电,需要一个中英转换的适配器。适配器需要实现英式的充电方式,和中式的插座。

class cnAdapter implements ukSocket{
    private $cnsocket;
    public function __construct(){
        $this->cnsocket = new cnCharger();
    }
    public function ukcharge(){
        return $this->cnsocket->cncharge();
    }
}

英国的酒店提供了英式插座。充电时,需要拿出我的中英适配器,接到英国酒店的插座上,进行充电。

class ukhotel{
    private $socket;
    public function __construct($socket){
        $this->socket = $socket; 
    }
    public function charge(){
        $this->socket->ukcharge();
    }
}
$adpater = new cnAdapter();
$ukhotel = new ukhotel($adpater);
$ukhotel->charge();
//测试结果:
//charging using China type charger.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值