设计模式笔记之外观模式的使用

<其它设计模式介绍及案例源码下载 >

简介:外观模式(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();
	}
}

猜你喜欢

转载自blog.csdn.net/fsy9595887/article/details/84369798