外观模式
用户离职场景
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("帐号回收完成"); } }
上一篇: 设计模式之模板(template)
下一篇: Beetl 1.1 发布,国产的模板语言