您的位置:首页 > 其它

外观模式

2016-06-17 00:34 381 查看
前言:

根据个人对外观模式(Facade)的理解,个人认为外观模式所起的作用就是将客户端所需要的功能从多个模块中将其

整合在一起,然后再供客户端去调用;注意,客户端所需要的功能,也许是分布在多个模块中,所以这时,我们就需要

将客户端所需的多个功能整合进一个类(Facade)中,这样客户端就可以直接调用这个类中的一个方法,而无需每个模块

的功能都亲自去调用一遍,以方便客户端的使用;

外观模式的定义:

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

(界面在这里指的是这个提供的public方法)

外观模式的代码示例:

AModule:

package facade;

/**
* Created by Will Smith on 2016/6/17.
*/
public interface AModule {

public void testA();
public void testAA();

}


AModuleImpl:

package facade;

/**
* Created by Will Smith on 2016/6/17.
*/
public class AModuleImpl implements AModule {
@Override
public void testA() {
System.out.println("testA");
}

@Override
public void testAA() {
System.out.println("testAA");
}
}


BModule:

package facade;

/**
* Created by Will Smith on 2016/6/17.
*/
public interface BModule {
public void testB();
public void testBB();
}


BModuleImpl:

package facade;

/**
* Created by Will Smith on 2016/6/17.
*/
public class BModuleImpl implements BModule {
@Override
public void testB() {
System.out.println("testB");
}

@Override
public void testBB() {
System.out.println("testBB");
}
}


Facade: (外观模式)

package facade;

/**
* Created by Will Smith on 2016/6/17.
*/
public class Facade {

public static void testFacade(){

AModuleImpl aModule = new AModuleImpl();
BModuleImpl bModule = new BModuleImpl();
/***
* 将客户端所需的功能整合在一个模块中;
* **/
aModule.testA();
bModule.testBB();
}

}


Client:

package facade;

/**
* Created by Will Smith on 2016/6/17.
*/
/***
* 假设Client客户端在这里需要调用
* testA()和testBB()方法
* **/
public class Client {

public static void main(String[] strings){

/***
* 这里只需调用Facade里边的testFacade()方法即可,
* 无需AModuleImpl的testA()和BModuleImpl的testBB()方法
* 都依次进行调用
* ***/
Facade.testFacade();
}

}


运行结果:



总结:

1>

以前,我们编写代码,当某个客户端需要多个功能,并且多个功能分别分布在多个模块上时,

我们一般是直接依次从多个模块身上去调用;当我们学习了外观模式之后,我们体会到:

当客户端需要多个分布在不同模块上的功能时,这是我们可以将其进行一个封装,以方便

客户端的调用,而无需让客户端还去了解各模块之间的关系以及各模块的功能的调用,方便

及简化了客户端对功能的调用,与此同时,也能让整个代码的风格,看上去更清晰易懂,封装

隔离,也方便了我们对于代码的维护;当其他客户端也需要相同功能时,代码也能起到很好的

复用效果;但倘若客户端只需要某一个模块的功能,而不是多个模块上的功能,这时我们就没有

必要去使用外观模式(Facade)了

2>

外观模式与简单工厂不同之处在于,外观模式是将多个模块上的多个功能整合在一起供客户端调用;

而简单工厂是将某一个接口返回给所需要的客户端;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: