欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

外观模式

程序员文章站 2022-05-17 19:40:18
...

用户离职场景

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("帐号回收完成");
	}
}

 

相关标签: 外观模式