用户离职场景
1、交接任务(TaskCenter)
2、归还电脑(AssetCenter)
3、回收权限(PermissionCenter)
4、回收账号(AccountCenter)
5、清算工资(FinanceCenter)
我们把离职任务写成类和方法的调用。
taskCenter.transitionTask();
assetCenter.recycleAsset();
permissionCenter.recyclePermission();
accountCenter.recycleAccount();
financeCenter.payCalculation();
用户离职变得如此复杂,让我们用外观模式解决用户离职的复杂性。
外观模式:提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。
如果你需要使用复杂子系统的强大威力,还是可以用原来的复杂接口。
但如果你需要一个方便使用的接口,那就使用外观。
1、为人员系统创建一个外观,人员系统外观(PeopleSystemFacade)。
2、这个外观类将人员系统的诸多组件视为一个子系统,通过调用这个子系统,来实现leaveOffice()方法。
3、现在人员离职只要调用人员系统外观的一个方法leaveOffice就可以了,所有步骤一口气搞定。
4、外观只是提供更直接的操作,并未将原来的子系统阻隔起来。如果你需要子系统类的更高层功能,还是可以用原来的子系统。
外观不止是简化了接口,也将客户从组件的子系统中解耦出来。
package com.ez.impl;
/**
* 调用人员系统外观类的离职方法,用户就可以完成复杂的离职程序。
* @author 窗外赏雪(EZ编程网)
*/
public class Test {
public static void main(String[] args) {
TaskCenter taskCenter = new TaskCenter();
AssetCenter assetCenter = new AssetCenter();
PermissionCenter permissionCenter = new PermissionCenter();
AccountCenter accountCenter = new AccountCenter();
FinanceCenter financeCenter = new FinanceCenter();
// 员工离职
PeopleSystemFacade peopleSystem = new PeopleSystemFacade(taskCenter,
assetCenter, permissionCenter, accountCenter, financeCenter);
peopleSystem.leaveOffice();
System.out.println("离职成功!");
}
}
package com.ez.impl;
/**
* 人员系统的外观
* 不止是简化了接口,也将客户从组件的子系统中解耦出来。
* @author 窗外赏雪(EZ编程网)
*/
public class PeopleSystemFacade {
private TaskCenter taskCenter;
private AssetCenter assetCenter;
private PermissionCenter permissionCenter;
private AccountCenter accountCenter;
private FinanceCenter financeCenter;
public PeopleSystemFacade(TaskCenter taskCenter, AssetCenter assetCenter,
PermissionCenter permissionCenter, AccountCenter accountCenter,
FinanceCenter financeCenter) {
this.taskCenter=taskCenter;
this.assetCenter=assetCenter;
this.permissionCenter=permissionCenter;
this.accountCenter=accountCenter;
this.financeCenter=financeCenter;
}
public void leaveOffice(){
this.taskCenter.transitionTask();
this.assetCenter.recycleAsset();
this.permissionCenter.recyclePermission();
this.accountCenter.recycleAccount();
this.financeCenter.payCalculation();
}
}
package com.ez.impl;
/**
* 任务中心
* @author 窗外赏雪(EZ编程网)
*/
public class TaskCenter {
public void transitionTask(){
System.out.println("任务交接完成");
}
}
package com.ez.impl;
/**
* 权限中心
* @author 窗外赏雪(EZ编程网)
*
*/
public class PermissionCenter {
public void recyclePermission(){
System.out.println("权限回收完成");
}
}
package com.ez.impl;
/**
* 财务中心
* @author 窗外赏雪(EZ编程网)
*/
public class FinanceCenter {
public void payCalculation(){
System.out.println("工资结算完成");
}
}
package com.ez.impl;
/**
* 资产中心
* @author 窗外赏雪(EZ编程网)
*/
public class AssetCenter {
public void recycleAsset(){
System.out.println("资产归还完成");
}
}
package com.ez.impl;
/**
* 帐号中心
* @author 窗外赏雪(EZ编程网)
*/
public class AccountCenter {
public void recycleAccount(){
System.out.println("帐号回收完成");
}
}