设为首页 加入收藏

TOP

Bridge设计模式 + FilenameFilter总结
2014-11-24 03:26:54 】 浏览:2919
Tags:Bridge 设计模式 FilenameFilter 总结

Bridge桥接设计模式是将一组功能(实现)与另一组使用该功能的其他对象(行为)分离开来,以便达到单一因素变化,然后使用对象调用的方式将这两组关联系起来,将问题的行为和实现分离开来实现,通过用聚合代替继承来解决子类爆炸性增长的问题。 Bridge桥接设计模式结构如下:

\

还是以画图为例演示Bridge桥接设计模式,例子代码如下:

[java]
  1. //行为 interface Shape{
  2. public void doDraw(); }
  3. class Circle implements Shape{ private Drawing draw
  4. public Circle(Drawing draw){ this.draw = draw;
  5. } public void doDraw(){
  6. draw.draw(); }
  7. } class Rectangle implements Shape{
  8. private Drawing draw public Rectangle(Drawing draw){
  9. this.draw = draw; }
  10. public void doDraw(){ draw.draw();
  11. } }
  12. //实现 interface Drawing{
  13. public void draw(); }
  14. class SolidDrawing implements Drawing{ public void draw(){
  15. System.out.println(“Drawing solide line…”); }
  16. } class DashDrawing implements Drawing{
  17. public void draw(){ System.out.println(“Drawing dash line…”);
  18. } }
  19. public class BridgeDemo{ public static void main(String[] args){
  20. //画一个实线的圆 Drawing draw1 = new SolidDrawing();
  21. Shape shape1 = new Circle(draw1); shape1.doDraw();
  22. //画一个虚线的矩形 Drawing draw2 = new DashDrawing();
  23. Shape shape2 = new Rectangle(draw2); shape2.doDraw();
  24. } }

    只从上面的例子代码可能还无法完全理解Bridge桥接设计模式,上面的圆形和矩形是行为,而实线画法和虚线画法则是实现,行为接口Shape通过聚合方式引用实现接口Drawing从而达到了行为和实现的桥接。如果需要增加第三种图形三角形,则不会影响实现部分。如果增加第三种画法折线画法,则不会影响图形行为部分,将行为与实现松耦合分离。当系统有两个可变因素时,即问题行为和问题实现都在变化时,传统实现方式可能组合情况太多造成类爆炸,适合使用桥梁模式。

    学习设计模式的人经常分不清Bridge桥接设计模式和Strategy策略设计模式,个人感觉两者简单的区别如下:

    (1).Bridge桥接设计模式中不但实现可以变化,问题行为也是可以变化的,且两者的变化是相互独立的,在两个维度都存在变化情况下优先考虑使用桥接模式。

    (2).Strategy策略设计模式中,仅仅存在算法实现策略的变化,问题行为是不变的,即仅有一个维度的变化。另外策略模式中考虑的算法层次的变化,是无状态,无数据的。

    JDK中桥接模式的应用:

    AWT JDBC

    一、FilenameFilter介绍


    java.io.FilenameFilter是文件名过滤器,用来过滤不符合规格的文件名,并返回合格的文件;

    一般地:

    (1)String[] fs = f.list();

    (2)File[] fs = f.listFiles();

    这两个方法返回f下的所有文件或目录;

    FilenameFilter用来把符合要求的文件或目录返回;

    因此可以调用:

    (1)String []fs = f.list(FilenameFilter filter);;

    (2)File[]fs = f.listFiles(FilenameFilter filter);

    二、文件名过滤器一般用法


    1.实现FilenameFilter接口;

    2.实现boolean accept(File dir,String name); //dir表示文件的当前目录,name表示文件名;

    class MyFilter implements FilenameFilter{
    
    private String type;            //type为需要过滤的条件,比如如果type=.jpg,则只能返回后缀为jpg的文件
    
    public MyFilter(String type){
    
    this.type = type;
    
    }
    
    public boolean accept(File dir,String name){           //返回true的文件则合格
    
    }
    
    }


    三、实例

    要求:返回当前目录下所有以.java结尾的文件;

    [java]
    1. package org.exam5a;
    2. import java.io.File; import java.io.FilenameFilter;
    3. public class T4 {
    4. public static void main(String[] args)throws Exception {
    5. File f = new File(.); MyFilter filter = new MyFilter(.java);
    6. String[] files = f.list(filter); for(String a:files){
    7. System.out.println(a); }
    8. } static class MyFilter implements FilenameFilter{
    9. private String type; public MyFilter(String type){
    10. this.type = type; }
    11. public boolean accept(File dir,String name){ return name.endsWith(type);
    12. } }
    13. }
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java基础-面向对象(封装、继承、.. 下一篇installshield调用第三方dll文件

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目