51

一,概念介绍

外观模式(Facade),他隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口。这种类型的设计模式属于结构性模式。为子系统中的一组接口提供了一个统一的访问接口,这个接口使得子系统更容易被访问或者使用。

二,代码实现

直接上代码吧,边看代码遍理解概念,我觉得这样效果也不错,

第一步:先定义系统A、系统B、系统C这三个类,

复制代码
package test;

/**

  • A系统
  • @author ningbeibei

*/
public class SystemA {
//A系统方法
public void functionA() {
System.out.println(“我是系统A…”);
}
}
复制代码
复制代码
package test;

/**

  • B系统
  • @author ningbeibei

*/
public class SystemB {
//B系统方法
public void functionB() {
System.out.println(“我是系统B…”);
}
复制代码
复制代码
package test;

/**

  • C系统
  • @author ningbeibei

*/
public class SystemC {
//C系统方法
public void functionC() {
System.out.println(“我是系统C…”);
}
}
复制代码
第二步:定义一个高层接口,分别声明调用三个子系统得方法

复制代码
package test;

/**

  • 定义一个更高层得接口,使其实现类实现所有方法
  • @author ningbeibei

*/
public interface Facade {
//方法A
void methodA();
//方法B
void methodB();
//方法C
void methodC();
}
复制代码
第三步:实现定义得高层接口,并且持有子系统对象引用

复制代码
package test;

/**

  • 实现我们刚才定义得高层接口中得方法
  • @author ningbeibei

*/
public class FacadeImpl implements Facade {

//这个系统需要实现类中持有他得引用。
private SystemA systema;
private SystemB systemb;
private SystemC systemc;

/**
 * 重写实现类构造方法,初始化这个三个类得对象
 */
FacadeImpl(){
    systema = new SystemA();
    systemb = new SystemB();
    systemc = new SystemC();
    
}

//调用A系统方法
@Override
public void methodA() {
    systema.functionA();
}
//调用B系统方法
@Override
public void methodB() {
    systemb.functionB();
}
//调用B系统方法
@Override
public void methodC() {
    systemc.functionC();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

}
复制代码
第四步:测试类编写

复制代码
package test;

/**

  • 测试类
  • @author ningbeibei

*/
public class test1 {

//测试方法
public static void main(String[] args) {
    
    /**客户端在调用这个三个系统时只需要通过Facade
     * 这个接口就可以访问各个系统得方法*/
    Facade fac = new FacadeImpl();
    fac.methodA();
    fac.methodB();
    fac.methodC();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

}
复制代码
运行结果

三、优点
  - 松散耦合
  使得客户端和子系统之间解耦,让子系统内部的模块功能更容易扩展和维护;

- 简单易用
  客户端根本不需要知道子系统内部的实现,或者根本不需要知道子系统内部的构成,它只需要跟Facade类交互即可。

- 更好的划分访问层次
  有些方法是对系统外的,有些方法是系统内部相互交互的使用的。子系统把那些暴露给外部的功能集中到门面中,这样就可以实现客户端的使用,很好的隐藏了子系统内部的细节。

 
二-十进制优先编码器74LS147multisim源文件,multisim10及以上版本可以正常打开仿真,是教材上的电路,可以直接仿真,方便大家学习
原文地址:https://www.cnblogs.com/gd11/p/14217245.html