`
jackmisweijie
  • 浏览: 71989 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类
最新评论

设计模式之门面模式

 
阅读更多
      在许多开源的框架中都充分的利用了设计模式这一概念,Struts典型的MVC模式的化身,Spring是工厂模式和单例模式的充分体现。在项目开发中,能充分利用设计模式的思想来考虑问题,来解决问题,来通过代码去实现。不但可以提高代码的质量,对程序的扩展,重用带来很大方便。其实我们项目中用设计模式编程就是加了一个封装层,减少客户必须处理的对象的数量。
      在设计模式中一般都遵循这样的原则:
      (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模式)

    设计模式之门面模式(Facade模式),介绍门面模式,实际例子分析,代码讲解等

    设计模式之门面模式Java实现和类设计图

    门面模式(Facade Pattern)是软件工程中一种常用的设计模式,属于结构型模式,它提供了一个统一的接口,用于访问子系统中的一组接口。在面向对象设计中,门面模式为子系统提供了更简单的接口,使得客户端可以更容易...

    设计模式之门面模式(附demo)

    门面模式(Facade Pattern)是软件工程中一种结构型设计模式,它提供了一个统一的接口,用来访问子系统中的一组接口。这个统一的接口使得客户端不必了解子系统内部的复杂性,只需要与门面进行交互即可。门面模式简化...

    设计模式之门面模式.docx

    门面模式,作为设计模式的一种,旨在为复杂的子系统提供一个简洁统一的接口,从而简化客户端与子系统之间的交互。这种模式由三个主要角色构成:门面角色、子系统角色和客户角色。门面角色是核心,它理解子系统的功能...

    23种设计模式--门面模式

    在提供的资源“第17课_设计模式之门面模式.avi”中,可能包含了对门面模式的详细讲解和实例演示,可以帮助你更深入地理解和掌握这一设计模式。通过观看视频,你将有机会看到如何在实际代码中应用门面模式,以及如何...

    C++设计模式课件14_Facade_门面模式.pdf

    ### C++设计模式之门面模式(Facade Pattern) #### 一、门面模式概述 在软件工程领域,设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易...

    Python设计模式之门面模式简单示例

    本文实例讲述了Python设计模式之门面模式。分享给大家供大家参考,具体如下: facade:建筑物的表面 门面模式是一个软件工程设计模式,主要用于面向对象编程。 一个门面可以看作是为大段代码提供简单接口的对象,就...

    Java 经典设计模式讲解以及项目实战

    Java 经典设计模式讲解以及项目实战 设计模式简介:主要介绍各种设计模式的概念和运用场景等 设计模式综合运用:主要是笔者在实际工作中运用到的一些设计模式综合运用事例的提炼 Spring设计模式简介:主要是讲述...

    JavaScript设计模式之门面模式原理与实现方法分析

    门面模式(Facade Pattern)是一种结构型设计模式,它的主要目的是提供一个统一的接口,用于客户端与复杂的子系统之间的交互,使得客户端无需关心子系统的内部结构和实现细节,只需要通过门面角色进行通信。...

    JAVA设计模式(门面模式)—视频

    什么是门面模式(Facade) 外部与一个子系统的通信必须通过一个统一的门面对象进行。这就是门面模式。 门面模式的结构 涉及两个角色: 门面角色:客户端可以调用这个角色的方法。此角色知道子系统的功能和责任。在...

    设计模式 之 “门面模式[Facade Pattern]”

    门面模式(Facade Pattern)是软件工程中一种常用的结构型设计模式,它的主要目的是提供一个统一的接口,用来简化系统中一组复杂的接口或类的使用。这个模式将复杂的子系统接口封装在一个简单的门面对象中,使得...

    设计模式C++学习之门面模式(Facade)

    门面模式(Facade)是设计模式中的一种结构型模式,它的主要目的是为了解决复杂的系统接口问题,提供一个简单的统一接口,使得客户端可以更方便地使用系统。在C++编程中,门面模式的应用尤为常见,它能有效地降低...

    门面模式门面模式

    门面模式(Facade Pattern)是一种结构型设计模式,它的主要目的是提供一个统一的接口,用来访问子系统中的一组接口。这个接口使得子系统更容易使用,同时也减少了客户端代码与子系统之间的耦合。门面模式通常用于...

    Java设计模式之禅

    《Java设计模式之禅》是一本深入浅出讲解设计模式的书籍,书中不仅包含23种经典设计模式的案例,还详细介绍了设计模式背后的思想和原则,适合初学者以及对设计模式有一定了解的程序员阅读。本书旨在帮助读者理解如何...

    python设计模式第2版.pdf

    设计模式是构建大型软件系统zui强大的方法之一,优化软件架构和设计已经逐渐成为软件开发和维护过程中的一个重要课题。 Python设计模式(第2版)通过11章内容,全面揭示有关设计模式的内容,并结合Python语言进行示例...

    【Java设计模式】《设计模式之禅》中的23种设计模式.zip

    【Java设计模式】《设计模式之禅》中的23种设计模式.zip 【Java设计模式】《设计模式之禅》中的23种设计模式.zip 【Java设计模式】《设计模式之禅》中的23种设计模式.zip 【Java设计模式】《设计模式之禅》中的23种...

Global site tag (gtag.js) - Google Analytics