门面模式

没看过门面模式(facade)的童鞋也许会好奇门面模式到底是啥样的模式。。。其实很简单, 一般人在实际的项目开发当中都用过。

现在几乎所有的项目在设计上都会采取分层, 什么Dao, Service, Control, View...
那好, 相信大家都有过Dao和Service层开发的经历。 那么你是否经常会碰到在一个Service里面对多个Dao的方法进行调用呢? 没错, 你猜对了, 这就是门面模式的大致模型。。。 是不是够简单, 原来自己一直都在用。。。

好了, 少废话, 先看看我们设计两个Dao层的接口:
public interface IUserDao {
	boolean authorization(String userName, Operation operation);

	enum Operation {
		DELETE_ACCOUNT {
			@Override
			public String toString() {
				return "删除帐户";
			}
		};

		@Override
		public abstract String toString();
	}
}

public interface IAccountDao {
	void deleteAccount(String accountName);
}


接口定义好就来看看实现
public class UserDaoImpl implements IUserDao {

	@Override
	public boolean authorization(String userName, Operation operation) {
		System.out.println(userName + "拥有" + operation.toString()
				+ "的权限, 验证完毕。");
		return true;
	}
}

public class AccountDaoImpl implements IAccountDao {

	@Override
	public void deleteAccount(String accountName) {
		System.out.println("帐户: " + accountName + " 删除成功。");
	}
}


接下来就到门面出场了
public interface IAccountService {
	void deleteAccount(String accountName);
}

public class AccountServiceImpl implements IAccountService {

	private IUserDao userDao;
	private IAccountDao accountDao;

	// 这里一般都会用Spring来注入
	public AccountServiceImpl(IUserDao userDao, IAccountDao accountDao) {
		this.userDao = userDao;
		this.accountDao = accountDao;
	}

	@Override
	public void deleteAccount(String accountName) {
		// 可以从Session或其他地方拿到
		String userName = "黄八";
		if (this.userDao.authorization(userName, Operation.DELETE_ACCOUNT)) {
			this.accountDao.deleteAccount(accountName);
		}
	}
}


门面定义好了, 他把验证权限的操作封装了起来, 用户根本就不知道有这么回事
客户端代码也很简单:
public class Client {

	public static void main(String[] args) {
		// 如果用Spring就不用这样麻烦了
		IUserDao userDao = new UserDaoImpl();
		IAccountDao accountDao = new AccountDaoImpl();

		// 这就是门面
		IAccountService accountService = new AccountServiceImpl(userDao,
				accountDao);

		// 黄八想要干掉王八
		accountService.deleteAccount("王八");
	}
}


执行结果:
引用
黄八拥有删除帐户的权限, 验证完毕。
帐户: 王八 删除成功。

你可能感兴趣的:(门面模式)