Android Ap 开发 设计模式第九篇:桥接模式

简介:

Bridge Pattern

模式解读

  bridge 是“桥梁”的意思。就像现实社会里的桥梁担负着连接两岸的重大责任一样,Bridge Pattern也是负责连接2个不同位置的参与者。

  桥接模式沟通着“功能的类层次”和“实现的类层次”。将“功能的类层次”和“实现的类层次”分成2个独立的类层次可能会弄得支离破碎,所以必须在2个类层次之间建一座沟通的桥梁。

 

程序示例

  按照上面的分法,本例可以分为4个类按照“功能的类层次”和“实现的类层次”分开,分别为:

功能的类层次

  Display   该类为打印内容的类

  CountDisplay   该类不仅可以打印内容还可以参数指定打印次数

实现的类层次

  DisplayImpl  该类为抽象类,抽象出打印内容所需要的功能

  StringDisplayImpl  该类实现了DisplayImpl 所抽象出来的功能

 

  按照如上划分,制作出了UML图,如下:

 

  功能的类层次:Display 类,代码:

 

public   class  Display {

    
private  DisplayImpl impl;

    
public  Display(DisplayImpl impl) {
        
this .impl  =  impl;
    }

    
public  String open() {
        
return  impl.rawOpen();
    }

    
public  String print() {
        
return  impl.rawPrint();
    }

    
public  String close() {
        
return  impl.rawClose();
    }

    
public  final String display() {
        open();

        String text 
=  print();

        close();
        
return  text;
    }
}

  该类通过参数将DisplayImpl传进来,直接让Display 有DisplayImpl的功能。该功能也是Builder Pattern 的模式。位于“功能的类层次”最上层的类,利用接口参与者的方法只记载基本功能的类。这个对象实例是保持住接口参与者。该类为扮演这个参与者的类。

 

  功能的类层次:CountDisplay类 ,代码:

 

public   class  CountDisplay extends Display {

    
public  CountDisplay(DisplayImpl impl) {
        super(impl);
        
//  TODO Auto-generated constructor stub
    }

    
public  String multiDisplay( int  times) {
        StringBuffer sb 
=   new  StringBuffer();
        sb.append(open()
+ " \n " );
        
for  ( int  i  =   0 ; i  <  times; i ++ ) {
            sb.append(print()
+ " \n " );
        }
        
return  sb.append(close()).toString();
    }
}

 

  该类系Display 的子类,并且再添加一个可按照次数循环打印的方法。对抽象参与者新增功能的参与者(改良后的抽象化),该类扮演在这个DEMO中扮演着这个角色。

 

  实现的类层次:DisplayImpl 类,代码:

 

public   abstract   class  DisplayImpl {
    
public   abstract  String rawOpen();
    
    
public   abstract  String rawPrint();
    
    
public   abstract  String rawClose();
}

  

  该类位于实现的类层次的最上层,分别抽象了rawOpen、rawPrint、rawClose三个方法,这三个方法分别对应到Display 类的open、print、close方法,执行前处理、打印和后处理。规定要实现的抽象参与者的接口 。

 

  实现的类层次:StringDisplayImpl 类,代码:

 

public   class  StringDisplayImpl extends DisplayImpl{

    
    
private  String  string ;    
    
    
public  StringDisplayImpl(String str){
        
this . string = str;
    }
    
    @Override
    
public  String rawClose() {
        
//  TODO Auto-generated method stub
         return  printLine();
    }

    @Override
    
public  String rawOpen() {
        
//  TODO Auto-generated method stub
         return     printLine();
    }

    @Override
    
public  String rawPrint() {
        
//  TODO Auto-generated method stub
         return   " | " + string + " | " ;
    }
    
    
private  String printLine(){
        StringBuffer sb
= new  StringBuffer();
        sb.append(
" + " );
        
for ( int  i = 0 ;i < string .length();i ++ ){
            sb.append(
" - " );
        }
        
return  sb.append( " + " ).toString();
    }

}

  

  该类实现了DisplayImpl的三个抽象方法,本例中唯一一处实现功能的也是由本类完成。具体实现接口 参与者的接口 。

 

  界面入口:BridgePatternActivity 类,代码:

public   class  BridgePatternActivity extends Activity {
    
/* * Called when the activity is first created.  */
    @Override
    
public   void  onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        
        ((Button)findViewById(R.id.Button01)).setOnClickListener(
new  OnClickListener() {
            
            @Override
            
public   void  onClick(View v) {
                
//  TODO Auto-generated method stub
                
                
                Display display
= new  Display( new  StringDisplayImpl( " terry_龙 " ));
                
                CountDisplay mCountDisplay
= new  CountDisplay( new  StringDisplayImpl( " terry " ));
                
                ((EditText)findViewById(R.id.EditText01)).setText(display.print());
                
                
                ((EditText)findViewById(R.id.EditText02)).setText(mCountDisplay.multiDisplay(
5 ));
                
            }
        });
        
    }
}


运行结果:

 

  代码下载:

桥接模式





 本文转自 terry_龙 51CTO博客,原文链接:http://blog.51cto.com/terryblog/624082,如需转载请自行联系原作者


相关文章
|
21天前
|
Java Android开发
Android 开发获取通知栏权限时会出现两个应用图标
Android 开发获取通知栏权限时会出现两个应用图标
12 0
|
12天前
|
XML 开发工具 Android开发
构建高效的安卓应用:使用Jetpack Compose优化UI开发
【4月更文挑战第7天】 随着Android开发不断进化,开发者面临着提高应用性能与简化UI构建流程的双重挑战。本文将探讨如何使用Jetpack Compose这一现代UI工具包来优化安卓应用的开发流程,并提升用户界面的流畅性与一致性。通过介绍Jetpack Compose的核心概念、与传统方法的区别以及实际集成步骤,我们旨在提供一种高效且可靠的解决方案,以帮助开发者构建响应迅速且用户体验优良的安卓应用。
|
15天前
|
监控 算法 Android开发
安卓应用开发:打造高效启动流程
【4月更文挑战第5天】 在移动应用的世界中,用户的第一印象至关重要。特别是对于安卓应用而言,启动时间是用户体验的关键指标之一。本文将深入探讨如何优化安卓应用的启动流程,从而减少启动时间,提升用户满意度。我们将从分析应用启动流程的各个阶段入手,提出一系列实用的技术策略,包括代码层面的优化、资源加载的管理以及异步初始化等,帮助开发者构建快速响应的安卓应用。
|
15天前
|
Java Android开发
Android开发之使用OpenGL实现翻书动画
本文讲述了如何使用OpenGL实现更平滑、逼真的电子书翻页动画,以解决传统贝塞尔曲线方法存在的卡顿和阴影问题。作者分享了一个改造后的外国代码示例,提供了从前往后和从后往前的翻页效果动图。文章附带了`GlTurnActivity`的Java代码片段,展示如何加载和显示书籍图片。完整工程代码可在作者的GitHub找到:https://github.com/aqi00/note/tree/master/ExmOpenGL。
19 1
Android开发之使用OpenGL实现翻书动画
|
15天前
|
Android开发 开发者
Android开发之OpenGL的画笔工具GL10
这篇文章简述了OpenGL通过GL10进行三维图形绘制,强调颜色取值范围为0.0到1.0,背景和画笔颜色设置方法;介绍了三维坐标系及与之相关的旋转、平移和缩放操作;最后探讨了坐标矩阵变换,包括设置绘图区域、调整镜头参数和改变观测方位。示例代码展示了如何使用这些方法创建简单的三维立方体。
13 1
Android开发之OpenGL的画笔工具GL10
|
21天前
|
Android开发
Android开发小技巧:怎样在 textview 前面加上一个小图标。
Android开发小技巧:怎样在 textview 前面加上一个小图标。
12 0
|
21天前
|
Android开发
Android 开发 pickerview 自定义选择器
Android 开发 pickerview 自定义选择器
12 0
|
23天前
|
缓存 Java Android开发
安卓应用开发中的内存优化策略
在移动应用开发领域,性能一直是衡量应用质量的重要指标之一。特别是对于安卓平台,由于设备的硬件配置多样化,内存管理成为开发者面临的重大挑战。本文将深入探讨针对安卓平台的内存优化技巧,包括内存泄漏的预防、合理使用数据结构和算法、以及高效的资源释放机制。通过这些方法,开发者可以显著提升应用的性能和用户体验。
|
28天前
|
Java Android开发
Android开发系列全套课程
本系列课程面向有java基础,想进入企业从事android开发的计算机专业者。学习搭配实战案例,高效掌握岗位知识。
18 1
|
29天前
|
数据可视化 测试技术 Android开发
安卓应用开发:打造高效用户界面的五大技巧
【2月更文挑战第30天】在竞争激烈的应用市场中,一个流畅且直观的用户界面(UI)对于安卓应用的成功至关重要。本文将探讨五个关键的UI设计技巧,这些技巧旨在提升用户体验并优化性能。我们将深入分析布局优化、资源管理、动画效果、响应式设计和测试流程等方面,并提供实用的代码示例和最佳实践,帮助开发者构建既美观又高效的安卓应用。