没看过门面模式(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("王八");
}
}
执行结果:
引用
黄八拥有删除帐户的权限, 验证完毕。
帐户: 王八 删除成功。
分享到:
相关推荐
门面模式(Facade Pattern)是一种结构型设计模式,它的主要目的是提供一个统一的接口,用来访问子系统中的一组接口。这个接口使得子系统更容易使用,同时也减少了客户端代码与子系统之间的耦合。门面模式通常用于...
门面模式(Facade Pattern)是一种设计模式,属于结构型模式,它的主要目的是为了解耦复杂的系统,提供一个统一的入口,使得外部客户端可以更简单、更方便地与系统交互,而无需关注系统的内部实现细节。在门面模式中...
门面模式(Facade)是设计模式中的一种结构型模式,它的主要目的是为了解决复杂的系统接口问题,提供一个简单的统一接口,使得客户端可以更方便地使用系统。在C++编程中,门面模式的应用尤为常见,它能有效地降低...
门面模式(Facade Pattern)是一种设计模式,它在软件工程中扮演着简化复杂系统接口的角色。门面模式的核心思想是为一个复杂的子系统提供一个单一、简洁的接口,使得客户端可以更容易地理解和使用该子系统,而无需...
什么是门面模式(Facade) 外部与一个子系统的通信必须通过一个统一的门面对象进行。这就是门面模式。 门面模式的结构 涉及两个角色: 门面角色:客户端可以调用这个角色的方法。此角色知道子系统的功能和责任。在...
门面模式(Facade Pattern)是设计模式中的一种结构型模式,它的主要目的是为了解决复杂的系统接口提供一个简单易用的统一入口。在Java中,门面模式的应用可以帮助我们更好地组织代码,降低系统的耦合度,提高代码的...
门面模式(Facade Pattern)是软件工程中一种常用的设计模式,属于结构型模式,它提供了一个统一的接口,用于访问子系统中的一组接口。在面向对象设计中,门面模式为子系统提供了更简单的接口,使得客户端可以更容易...
门面模式(Facade Pattern)是一种设计模式,属于结构型模式,它为子系统提供了一个统一的接口,使得客户端可以更方便地使用子系统的功能,而无需了解子系统内部的复杂性。在Android开发中,门面模式同样发挥着重要...
门面模式(Facade Pattern)是软件工程中一种结构型设计模式,它提供了一个统一的接口,用来访问子系统中的一组接口。这个统一的接口使得客户端不必了解子系统内部的复杂性,只需要与门面进行交互即可。门面模式简化...
### C++设计模式之门面模式(Facade Pattern) #### 一、门面模式概述 在软件工程领域,设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易...
门面模式(Facade Pattern)是软件工程中一种常用的设计模式,属于结构型模式。它提供了一个统一的接口,用来访问子系统中的一群接口。门面模式使得子系统的使用更为简单,同时也隐藏了子系统的复杂性,使得客户端...
门面模式(Facade Pattern)是软件工程中一种常用的结构型设计模式,它的主要目的是提供一个统一的接口,用来简化系统中一组复杂的接口或类的使用。这个模式将复杂的子系统接口封装在一个简单的门面对象中,使得...
门面模式(Facade Pattern)是软件工程中一种常用的设计模式,属于结构型模式。它为一个复杂的子系统提供了一个统一的接口,使得客户端可以更容易地使用这个子系统,而无需了解其内部的具体实现细节。在实际开发中,...
门面模式(Facade Pattern)是一种结构型设计模式,它的主要目的是提供一个统一的接口,用于客户端访问复杂的子系统。在大型软件系统中,通常会有很多个子系统,每个子系统都有自己的职责,而门面模式就是为了让...
设计模式之门面模式(Facade模式),介绍门面模式,实际例子分析,代码讲解等
门面模式(Facade)是软件设计模式中的一种结构型模式,它的主要目的是为了解耦复杂的系统,通过提供一个简单的统一接口来屏蔽子系统的复杂性,使得客户端与子系统的交互变得更加简单和直观。在大型软件系统中,往往...
门面模式,作为设计模式的一种,旨在为复杂的子系统提供一个简洁统一的接口,从而简化客户端与子系统之间的交互。这种模式由三个主要角色构成:门面角色、子系统角色和客户角色。门面角色是核心,它理解子系统的功能...
门面模式(Facade Pattern)是软件工程中一种结构型设计模式,它提供了一个统一的接口,用来访问子系统中的一组接口。这个统一接口就是门面,它为复杂的子系统提供了一个简单的接口,使得客户端无需了解子系统内部的...
门面模式,作为一种软件设计模式,是EJB(Enterprise Java Beans)中的一种经典模式,它在企业级应用开发中起到简化复杂系统接口的作用。EJB是Java编程语言中用于构建服务器端企业级应用的组件,它们是可分布式部署...