登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

仙剑奇侠传的博客

羽化成仙

 
 
 

日志

 
 

设计模式之Facade(外观)  

2011-07-20 23:31:13|  分类: 设计模式 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Fa?ade模式在编程中我们会不知不觉地使用,外观模式(Facade Pattern)可以将一系列复杂的类包装成一个简单的封闭接口,也称为门面模式。应用场景举例:

1、把经常出现的重复性代码用对象加以封装,以减少代码冗余。如在Jdbc编程中,可能会经常出现如下代码片断:

Class.forName("driverPath");

Connection conn = DriverManager.getConnection(URL, user, password);

 

这样每次要从数据库获得数据或写数据到数据库中,要重复地使用以上代码,这样造成代码不断重复,如果数据库用户名或密码改变,那么在很多类文件中得不断修改相关对代码,以上代码是很糟糕的代码。为了增加复用。可以把此封装一个对象。如这样调用MyConn.getConn。这就是Facade模式,这种模式的作用就是客户端最终得到某种功能的代码给客户端调用,相关的过程代码可以建立一个对象进行封装。

2、封装已有的类,弥补已有类的不足。如java.util.stack这个类没有把Collection对象进行一次压入与一次性弹出的功能,可以为该类增长这两个功能。代码示例如下:

package com.wsysoft.lang;

 

import java.util.ArrayList;

import java.util.List;

import java.util.Stack;

 

public class StackDemo<E> {

    private Stack<E> stack = null;

 

    public StackDemo() {

 

        stack = new Stack<E>();

    }

 

    // 压一个List容器对象入栈

    public void push(List<E> listObj) {

        stack = new Stack<E>();

        for (E e : listObj) {

            stack.push(e);

        }

 

    }

 

    // 弹出<code>popCount<code> 个元素出栈形成List数组。

    public List<E> pop(int popCount) {

        if (popCount > stack.size()) {

            throw new IndexOutOfBoundsException();

        } else if (popCount < 0) {

            throw new IllegalArgumentException("Illegal popCount: " + popCount);

        }

        List<E> arrayList = new ArrayList<E>(popCount);

 

        for (int i = 0; i < popCount; i++) {

            arrayList.add(stack.pop());

        }

 

        return arrayList;

 

    }

}

  评论这张
 
阅读(163)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018