在项目开发中,能充分利用设计模式的思想来考虑问题,来解决问题,来通过代码去实现。不但可以提高代码的质量,对程序的扩展,重用带来很大方便。其实我们项目中用设计模式编程就是加了一个封装层,减少客户必须处理的对象的数量。
在设计模式中一般都遵循这样的原则:
(1)按接口编程。
(2)尽量用聚合代替继承。
(3)找出变化并封装之。
上面主要讲了一些设计模式的作用和原则。接下来我要讲的是在实际项目中应用的比较多的其中一个模式----->门面模式(Facade),有的叫正面,外观模式,其实都是一个意识,都指的这个模式。它也是美国著名的四人帮(GOF)写的23种模式之一。
简单的理解:我们需要用一种比原有的方法更简单的方法与系统交互,或者说,我们需要以一种特殊的方式使用系统。主要是为子系统中的一组接口提供一个统一的接口。Facade模式定义了一个更高的接口,使子系统更加容易使用。它的意图要求一个一致的高层接口。
我简单的用代码方式表现出来。我写的都是一些伪代码。主要是来讲清Facade的应用。
以简单的登录为例:
我们一般都会写一个DAO层,主要封装了数据库里增,删,该,查作用。
我们一般会写一个接口:简单声明一个方法。根据用户名和密码来从数据库中查找是否存在。
public interface UserDAO {
public abstract List findByUserName(Object userName,Object passWord);
public abstract List findByUserName(Object userName);
public abstract List findByUserPassword(Object userPassword);
public abstract List findByUserPortraitUrl(Object userPortraitUrl);
public abstract List findByEmail(Object email);
public abstract List findByUrl(Object url);
public abstract List findByRole(Object role);
}
然后再写一个接口的实现:
public class UserDAOImp implements W3csTUserDAO {
public List findByUserName(Object userName,Object passWord){
//判断用户是否存在。存在返回一个list,反之为null.
}
public List findByUserName(Object userName){
//实现
}
public List findByUserPassword(Object userPassword){
//实现
}
public List findByUserPortraitUrl(Object userPortraitUrl){
//实现
}
public List findByEmail(Object email){
//实现
}
public List findByUrl(Object url){
//实现
}
public List findByRole(Object role){
//实现
}
}
我们一般应用门面模式是在业务层。我们在写一个业务方法:和上面一样先声明一个接口。
public interface UserService{
public boolean login(Stirng userName,String passWord);
}
在写一个业务接口的实现。
public class UserServiceImp implements UserService{
private UserDAO userDao;
public void setUserDAO(UserDAO userDao){
this.userDao = userDao;
}
public UserDAO getUserDao(){
return userDao;
}
public boolean login(Stirng userName,String passWord){
if(userDao.findByUserName(userName,passWord)!=null){
//合法用户,登录成功。
}else{
//登录失败。
}
}
}
我们可以看到我们在业务层中对DAO层又进行了一层封装。这就是Facade模式的简单应用的场合,有人可能会想为什么不直接调用DAO层呢?因为在实际的应用中,也许DAO中的方法太多,而我们实际用到的方法只是其中的一个或几个,所有把业务中用到的方法在提出出来封装处理,对调用者来说也很方便,它不会直接接触到DAO,我们把DAO封装在Service层中是为了让各个层职责分明。这样做还有一个用处,我们可能还会对用户的登录信息进行记录,这是我们就可以在Service层中处理,以及事务等。之所以把它封装在业务层中,避免了用户直接对数据库DAO层的直接操作,对用户来说是透明的。这样就简单了实现了松耦合。
Facade模式可以应用于:
<1>不需要使用一个复杂系统的所有功能,而且可以创建一个新的类,包含访问系统的所用规则。如果只需要使用系统的部分功能,那么你为新类创建的API将比原有系统的API简单的多。
<2>希望封装或者隐藏原系统。
<3>希望使用原系统的功能,而且还希望增加一些附件功能。
分享到:
相关推荐
设计模式之门面模式(Facade模式),介绍门面模式,实际例子分析,代码讲解等
eclipse工程文件 包含代码 有助理解 门面(Facade)模式 <br>... 二、 门面模式的结构 <br> 门面模式是对象的结构模式。门面模式没有一个一般化的类图描述,下图演示了一个门面模式的示意性对象图:
**外观模式(Facade Pattern)**是一种结构型设计模式,它主要解决的是复杂系统或子系统对外暴露一个简单统一的接口,使得客户端无需关心内部复杂的交互细节。这种模式在实际开发中广泛应用,尤其在大型项目中,它能...
设计模式是软件开发中的重要概念,它是一种在特定场景下解决问题的通用、可重用的设计方案。设计模式的目的是为了提高代码的可读性、可维护性以及系统设计的灵活性。本文将深入探讨FACADE模式、Adapter模式以及...
外观模式(Facade Pattern)是设计模式中的一种结构型模式,主要目的是为了解决复杂的系统接口问题,提供一个简单的统一入口,使得客户端可以更方便地使用系统。在Java中,外观模式通常用来隐藏系统的复杂性,对外只...
外观模式(Facade Pattern)是一种结构型设计模式,用于为复杂子系统提供一个简单的接口。它通过封装系统内部的复杂性,提供一个统一的接口,使得客户端能够更加方便地使用子系统的功能。这种模式通常用于简化代码、...
**外观(Facade)设计模式**是一种结构型设计模式,它为复杂的系统或子系统提供一个统一、简洁的接口,使得客户端可以更容易地与其交互。在软件工程中,当一个系统包含多个子系统或者组件,而这些子系统之间相互依赖...
章节介绍:1、爪哇语言结构性模式之变压器模式介绍 2、爪哇语言抽象工厂创立性模式介绍 3、工厂方法创立...10、设计模式之State 11、设计模式之Facade(外观) 12、设计模式之Interpreter(解释器) 13、设计模式之Visitor
在这篇文章中,我们将深入探讨两种常见的设计模式:Facade(外观)模式和Simple Factory(简单工厂)模式。 首先,让我们关注Facade模式。外观模式是一种结构型设计模式,它的主要目标是提供一个统一的接口,用来...
设计模式之Facade(外观) 设计模式之Proxy(代理) 设计模式之Adapter(适配器) 设计模式之Composite(组合) 设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享元) 行为模式: 设计模式之Template ...
门面模式(Facade)是设计模式中的一种结构型模式,它的主要目的是为了解决复杂的系统接口问题,提供一个简单的统一接口,使得客户端可以更方便地使用系统。在C++编程中,门面模式的应用尤为常见,它能有效地降低...
在软件设计模式的世界里,`Command`(命令)和`Facade`(外观)模式是非常重要的两种设计模式。它们分别服务于不同的目的,但都是为了提高代码的可读性、可维护性和灵活性。 `Command`模式是一种行为设计模式,它将...
门面模式(Facade Pattern)是软件工程中一种常用的结构型设计模式,它的主要目的是提供一个统一的接口,用来简化系统中一组复杂的接口或类的使用。这个模式将复杂的子系统接口封装在一个简单的门面对象中,使得...
在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要资源分。敬请期待。 这是第11节:结构型...
设计模式面面观(13):外观模式(Facade Pattern)-结构型模式 http://blog.csdn.net/fanweiwei/archive/2008/04/17/2299641.aspx
其中包括代理模式(Proxy)、装饰器模式(Decorator)、适配器模式(Adapter)、桥接模式(Bridge)、组合模式(Composite)、外观模式(Facade)和享元模式(Flyweight)。这些模式帮助我们在不修改原有代码的情况...
设计模式之Facade(外观) 设计模式之Proxy(代理) 设计模式之Adapter(适配器) 设计模式之Composite(组合) 设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享元) 行为模式: 设计模式之Template ...
设计模式面面观(14):享元模式(Facade Pattern)-结构型模式 http://blog.csdn.net/fanweiwei/archive/2008/04/25/2326692.aspx