>>分享Java编程技术,对《Java面向对象编程》等书籍提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 21547 个阅读者 刷新本主题
 * 贴子主题:  Java设计模式:外观模式 回复文章 点赞(0)  收藏  
作者:sunshine    发表时间:2019-08-11 23:33:47     消息  查看  搜索  好友  邮件  复制  引用

  

外观模式

    外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。

    这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。            

介绍

     意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

     主要解决:降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。

     何时使用:

1、客户端不需要知道系统内部的复杂联系,整个系统只需提供一个"接待员"即可。

2、定义系统的入口。

         如何解决:客户端不与系统耦合,外观类与系统耦合。

         关键代码:在客户端和复杂系统之间再加一层,这一层将调用顺序、依赖关系等处理好。

         应用范例:

1、去医院看病,可能要去挂号、门诊、划价、取药,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理,就很方便。

2、JAVA 的三层开发模式。

         优点:

1、减少系统相互依赖。

2、提高灵活性。

3、提高了安全性。

         缺点:不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。

         使用场景:

1、为复杂的模块或子系统提供外界访问的模块。

2、子系统相对独立。

3、预防低水平人员带来的风险。

         注意事项:在层次化结构中,可以使用外观模式定义系统中每一层的入口。            

实现

     我们将创建一个 Shape 接口和实现了 Shape 接口的实体类。下一步是定义一个外观类 ShapeMaker。

         ShapeMaker 类使用实体类来代表用户对这些类的调用。FacadePatternDemo,我们的演示类使用 ShapeMaker 类来显示结果。

    点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

步骤 1

     创建一个接口。                      

Shape.java

public   interface   Shape   {
    void   draw ( ) ;
}

步骤 2

     创建实现接口的实体类。                      

Rectangle.java

public   class   Rectangle   implements   Shape   {

   @ Override
    public   void   draw ( )   {
       System . out . println ( " Rectangle::draw() " ) ;
    }
}

Square.java

public   class   Square   implements   Shape   {

   @ Override
    public   void   draw ( )   {
       System . out . println ( " Square::draw() " ) ;
    }
}

Circle.java

public   class   Circle   implements   Shape   {

   @ Override
    public   void   draw ( )   {
       System . out . println ( " Circle::draw() " ) ;
    }
}

步骤 3

     创建一个外观类。                      

ShapeMaker.java

public   class   ShapeMaker   {
    private   Shape   circle ;
    private   Shape   rectangle ;
    private   Shape   square ;

    public   ShapeMaker ( )   {
       circle  =  new   Circle ( ) ;
       rectangle  =  new   Rectangle ( ) ;
       square  =  new   Square ( ) ;
    }

    public   void   drawCircle ( ) {
       circle . draw ( ) ;
    }
    public   void   drawRectangle ( ) {
       rectangle . draw ( ) ;
    }
    public   void   drawSquare ( ) {
       square . draw ( ) ;
    }
}

步骤 4

     使用该外观类画出各种类型的形状。                      

FacadePatternDemo.java

public   class   FacadePatternDemo   {
    public   static   void   main ( String [ ]   args )   {
       ShapeMaker   shapeMaker  =  new   ShapeMaker ( ) ;

       shapeMaker . drawCircle ( ) ;
       shapeMaker . drawRectangle ( ) ;
       shapeMaker . drawSquare ( ) ;      
    }
}

步骤 5

     执行程序,输出结果:

Circle::draw()

Rectangle::draw()

Square::draw()






程序猿的技术大观园:www.javathinker.net



[这个贴子最后由 flybird 在 2020-02-18 22:15:49 重新编辑]
  Java面向对象编程-->继承
  JavaWeb开发-->使用Session(Ⅰ)
  JSP与Hibernate开发-->域对象在持久化层的四种状态
  Java网络编程-->用Swing组件展示HTML文档
  精通Spring-->绑定表单
  Vue3开发-->组合(Composition)API
  解决javac编译错误: 编码UTF8/GBK的不可映射字符
  java.util.logging.Logger使用详解
  Java并发编程之验证volatile不能保证原子性
  Java关键字final、static使用总结
  如何优雅地打印一个Java对象?
  java常见的几种调用机制:同步调用,异步调用,回调
  volatile 与 synchronized 详解
  Eclipse使用指南:创建Java项目的步骤
  正则表达式:运算符优先级
  正则表达式性能调优
  Java入门实用代码:集合输出
  Java入门实用代码:数组转集合
  Java入门实用代码:删除链表中的元素
  史上最全正则表达式合集(马上收藏)
  Eclipse中怎么一键去除java项目中的信息打印语句
  更多...
 IPIP: 已设置保密
树形列表:   
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。