设计模式学习笔记之四---外观模式

    外观模式(Facade):为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
    以上的定义摘自《大话设计模式》。按我自己的理解,外观模式:将一个或多个类中的多个方法打包到一个方法中供外界调用。打个比方,现有A类的a方法、B类的b方法、C类的c方法,我们的业务代码想调用三个方法,
public class business{
  // 业务代码
  public void method() {
    A.a(); //调用A方法
    B.b(); //调用B方法
    C.c(); //调用C方法
  }
}

使用外观模式后,我们不让业务代码直接调用这三个方法,而是通过一个包装后的方法来调用
public class Facade {
  public void facadeMethod() {
    A.a(); //调用A方法
    B.b(); //调用B方法
    C.c(); //调用C方法
  }
}
public class business{
  Facade facade = new Facade();
  
  // 业务代码
  public void method() {
    facade.facadeMethod(); //通过包装后的方法来调用
  }
}

很多朋友即使没特意学习过外观模式,但在实际工作中肯定有运用到它,比如在持久层和业务层之间,我们通常就会建立外观,将一系列持久层操作使用外观包装起来供业务层调用。

我们再做个例子,我们的公司有员工要入职,入职需要往数据库里记录员工基本信息、给员工分配的电脑信息、该员工的福利信息,使用外观模式代码如下:
public class EmployeeDao {
	//保存员工信息
	public void saveEmployee(String name) {
		System.out.println("新增了一名员工:" + name);
	}
	//删除员工信息
	public void deleteEmployee(String name) {
		System.out.println("删除了一名员工:" + name);
	}
}
public class EmpComputerDao {
	// 保存给员工分配电脑信息
	public void saveComputer(String eName) {
		System.out.println("给员工" + eName + "分配了电脑");
	}
	// 删除员工分配电脑信息
	public void deleteComputer(String eName) {
		System.out.println("将员工" + eName + "的电脑收回");
	}
}
public class WelfareDao {
	// 保存员工福利信息
	public void saveWelfare(String eName) {
		System.out.println("给员工 " + eName + "新增福利");
	}
	// 删除员工福利信息
	public void deleteWelfare(String eName) {
		System.out.println("将员工" + eName + "的福利取消");
	}
}
public class Company {
	EmployeeDao emp = new EmployeeDao();
	EmpComputerDao comp = new EmpComputerDao();
	WelfareDao welf = new WelfareDao();
	
	// 员工入职
	public void employeeEntry(String eName) {
		emp.saveEmployee(eName); // 保存员工信息
		comp.saveComputer(eName); // 保存给员工分配电脑信息
		welf.saveWelfare(eName); // 保存员工福利信息
	}
	// 员工辞职
	public void resign(String eName) {
		emp.deleteEmployee(eName); // 删除员工信息
		comp.deleteComputer(eName); // 删除员工分配电脑信息
		welf.deleteWelfare(eName); // 删除员工福利信息
	}
}
public class MainClass {
	/**
	 * 业务代码
	 * @param args
	 */
	public static void main(String[] args) {
		Company company = new Company();
		
		// 张三入职
		company.employeeEntry("张三"); 
		System.out.println("三年以后。。。。。。");
		// 三年后,张三辞职了
		company.resign("张三"); 
	}
}


外观模式的好处:
封装了细节,更加易用和可维护。
比如张三入职,我们在业务代码上只需要调用入职方法,而不需要去管入职具体做了哪些操作,以后维护这段代码时候我们非常明确这里是张三入职了!而不用去猜“保存员工信息”、“保存员工分配电脑信息”等等这些操作连在一起到底是要干嘛呢。。。

你可能感兴趣的:(设计模式)