我们首先来看适配器模式:
定义:
将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
如果一个接口需要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模式是为了给客户端提供一个统一入口,并对外屏蔽内部子系统的调用细节。
本文详细介绍了适配器模式和外观模式的概念与应用。适配器模式用于解决接口不兼容的问题,使原本不能一起工作的类能够协同工作。外观模式则通过提供一个统一的接口,简化了客户端与多个子系统之间的交互。
257

被折叠的 条评论
为什么被折叠?



