设计模式之适配器模式(Adapter)与外观模式(Facade)

本文详细介绍了适配器模式和外观模式的概念与应用。适配器模式用于解决接口不兼容的问题,使原本不能一起工作的类能够协同工作。外观模式则通过提供一个统一的接口,简化了客户端与多个子系统之间的交互。

我们首先来看适配器模式:

定义:
将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

如果一个接口需要B接口,但是待传入的对象却是A接口,无法正常调用工作,该怎么办?这时候适配器模式就体现出其作用了:Adapter模式可以将一个A接口转换为B接口,使得新的对象符合B接口规范。

步骤:
1.实现目标接口;
2.内部持有一个待转换接口的引用;
3.在目标接口的实现方法内部,调用待转换接口的方法。

具体说明:

public BAdapter implements B {
    private A a;
    public BAdapter(A a) {
        this.a = a;
    }
    public void b() {
        a.a();
    }
}

编写Adapter实际上就是编写一个实现了B接口,并且内部持有A接口的类,在Adapter内部将B接口的调用“转换”为对A接口的调用。

注意:
只有A、B接口均为抽象接口时,才能非常简单地实现Adapter模式。

————————————————————————————————————————

接着来看外观模式:

定义:
为子系统中的一组接口提供一个一致的界面。Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

如果客户端要跟许多子系统打交道,那么客户端需要了解各个子系统的接口,比较麻烦。如果有一个统一的“中介”,让客户端只跟中介打交道,中介再去跟各个子系统打交道,对客户端来说就比较简单。所以Facade就相当于搞了一个中介。

步骤:
在一个接口中调用其他接口,对客户端屏蔽内部调用的细节。

图示:
在这里插入图片描述
代码示例:

package facade;
public class FacadePattern
{
    public static void main(String[] args)
    {
        Facade f=new Facade();
        f.method();
    }
}
//外观角色
public class Facade
{
    private SubSystem01 obj1=new SubSystem01();
    private SubSystem02 obj2=new SubSystem02();
    private SubSystem03 obj3=new SubSystem03();
    public void method()
    {
        obj1.method1();
        obj2.method2();
        obj3.method3();
    }
}
//子系统角色
public class SubSystem01
{
    public  void method1()
    {
        System.out.println("子系统01的method1()被调用!");
    }   
}
//子系统角色
public class SubSystem02
{
    public  void method2()
    {
        System.out.println("子系统02的method2()被调用!");
    }   
}
//子系统角色
public class SubSystem03
{
    public  void method3()
    {
        System.out.println("子系统03的method3()被调用!");
    }   
}

总结:
Facade模式是为了给客户端提供一个统一入口,并对外屏蔽内部子系统的调用细节。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值