<其它设计模式介绍及案例源码下载 >
简介:外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供一个客户端可以访问系统的接口。它向现有的系统添加一个接口,来隐藏系统的复杂性。这种模式涉及一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。
主要解决:降低访问复杂系统的内部各个子系统时的复杂度,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,简化客户端与之的接口。
优点: 1、减少系统相互依赖。 2、提高灵活性。 3、提高了安全性。
缺点:不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。
使用场景: 1、为复杂的模块或子系统提供外界访问的模块。 2、子系统相对独立。3、客户端不需要知道系统内部的复杂联系,整个系统只需提供一个"接待员"即可。
实现案例:业务处理抽象类FacadeAbs提供各业务处理的抽象接口,由其子类FacadeClass做具体实现,并实现各业务接口,在接口中封装对各子接口的调用。
例如下:
public abstract class FacadeAbs { public DirectManager ma; public MediaManager mm; public BiggestManager bm; public abstract void askForLeave(); public abstract void askForAddSalary(); //其他方法 } public class FacadeClass extends FacadeAbs{ public FacadeClass() { super(); ma=new DirectManager(); mm=new MediaManager(); bm=new BiggestManager(); } public void askForLeave() { //手续一 ma.leaveApprove(); //手续二 mm.leaveApprove(); //手续... } public void askForAddSalary() { //手续一 ma.addSalaryApprove(); //手续二 mm.addSalaryApprove(); //手续三 bm.addSalaryApprove(); //手续。。。 } } public class DirectManager { //其他方法 public void leaveApprove() { System.out.println(" 直接主管审批请假"); } public void addSalaryApprove() { System.out.println(" 直接主管审批加薪"); } } public class MediaManager { //其他方法 public void leaveApprove() { System.out.println(" 部门经理审批请假"); } public void addSalaryApprove() { System.out.println(" 部门经理审批加薪"); } } public class BiggestManager { //其他方法。。。 public void addSalaryApprove() { System.out.println(" 大boss审批加薪"); } } public class TestClass { public static void main(String[] args) { FacadeClass fc=new FacadeClass(); System.out.println("请假申请:"); fc.askForLeave(); System.out.println("加薪申请:"); fc.askForAddSalary(); } }