一,概念介绍设计模式
外观模式(Facade),他隐藏了系统的复杂性,并向客户端提供了一个能够访问系统的接口。这种类型的设计模式属于结构性模式。为子系统中的一组接口提供了一个统一的访问接口,这个接口使得子系统更容易被访问或者使用。ide
二,代码实现测试
直接上代码吧,边看代码遍理解概念,我以为这样效果也不错,spa
第一步:先定义系统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..."); } }
第二步:定义一个高层接口,分别声明调用三个子系统得方法code
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(); } }
第四步:测试类编写blog
package test; /** * 测试类 * @author ningbeibei * */ public class test1 { //测试方法 public static void main(String[] args) { /**客户端在调用这个三个系统时只须要经过Facade * 这个接口就能够访问各个系统得方法*/ Facade fac = new FacadeImpl(); fac.methodA(); fac.methodB(); fac.methodC(); } }
运行结果接口
使得客户端和子系统之间解耦,让子系统内部的模块功能更容易扩展和维护;io
客户端根本不须要知道子系统内部的实现,或者根本不须要知道子系统内部的构成,它只须要跟Facade类交互便可。
有些方法是对系统外的,有些方法是系统内部相互交互的使用的。子系统把那些暴露给外部的功能集中到门面中,这样就能够实现客户端的使用,很好的隐藏了子系统内部的细节。
4、我写得不足之处望各位批评指正