适配器模式与外观模式

适配器模式

定义

将一个类的接口,转换成客户端期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。分为:

 - 对象适配器
     被适配者作为一个实例(被适配者)组合到适配器中,用这个实例完成目标接口(适配者)的动作
 - 类适配器 -多继承不适合java
     适配器同时继承适配者与被适配者,用被被适配者的方法方式实现适配者的方法

案例

把火鸡适配成一只鸭子

让火鸡实现鸭子的叫唤和飞的动作。

/**
 * 对象继承 :适配器实现目标接扣;将被适配者组合给适配器. 
 * 缺点: 必须实现目标接口所有方法。可是万一我只需要适配一个接口呢,那其他的接口也得强制实现
     * 本来想 让其他不想实现的接口库置为private,这样外部就调不到了.但继承/实现 不能减少被继承者的范围,也就不能置为私有的。
 * 
 */
public class TurkeyAdapter implements Duck{
    //被适配者
    private Turkey turkey;

    public TurkeyAdapter(Turkey turkey){
        this.turkey = turkey;
    }

    @Override
    public void quack(){
        turkey.gobble();
    }
    @Override
    public void fly(){
        turkey.walk();
    }
    /*
        Cannot reduce the visibility of the inherited method from Duck
    @Override
    private void fly(){
        turkey.walk();
    }
    */
}
枚举类适配成迭代器
但是这个使用场景是什么???
public class EnumerationIterator implements Iterator {
    private Enumeration e ;

    @Override
    public boolean hasNext() {
        return e.hasMoreElements();
    }
    @Override
    public Object next() {

        return e.nextElement();
    }
    @Override
    public void remove() {
        //因为被适配者Enumeration 没有remove()方法
        throw new UnsupportedOperationException();
    }
}

模式框架

这里写图片描述

外观模式

定义

定义一个统一的接口,用来访问子系统中的一群接口。外观接口定义了一个高层接口,让系统更容易访问,而且可以让客户从系统的组件中解耦。

最少知识原则

只和你的密友谈话。即,希望在我们的设计中,不要让太多的类耦合在一起,免得修改系统的一部分,会影响很多部分。增加维护成本。

例如:

public float getTempt(){
    Thermometer t = station.getThermometer();
    return t.getTrmperature();
}
public float getTempt(){
    return station.getTrmperature();//需要在station类中增添该方法
}

利用该规则设计好处是 解耦,缺点是更多的“包装”类、风阀被制造出来,增加开发复杂度和时间。

装饰者与适配器的比较

装饰者是将一些新的行为加入进来
适配器是将原有的接口转化成赢一个接口,并增加或者减少自己的功能。

适配器与外观的比较

外观和适配器都可以包装很多类,但外观的意图是简化接口,方便客户访问子系统;而适配器的意图是将接口转换成其他接口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值