从重构的角度学习bridge设计模式

贪婪的大地

贪婪的大地

2016-02-19 13:46

get新技能是需要付出行动的,即使看得再多也还是要动手试一试。今天图老师小编跟大家分享的是从重构的角度学习bridge设计模式,一起来学习了解下吧!
从重构的角度学习bridge设计模式

  Bridge模式是一个在实际系统中经常应用的模式。它最能体现设计模式的原则针对接口进行编程,和使用聚合不使用继续这两个原则。

!-- frame contents -- !-- /frame contents --

  由于我们过分的使用继续,使类的结构过于复杂,不易理解,难以维护。非凡是在Java中由于不能同时继续多个类,这样就会造成多层继续,维护更难。
  
  Bridge模式是解决多层继续的根本原因。假如你在实现应用中一个类,需要继续两个以上的类,并且这两者之间又持有某种关系,它们两个都会有多种变化。
  
  Bridge模式是把这两个类,分解为一个抽象,一个实现,使它们两个分离,这样两种类可以独立的变化。
  
  抽象就是,把一个实体的共同概念(相同的步骤),抽取出来(分解出几个相互独立的步骤),作为一个过程。如我们把数据库的 操作抽象为一个过程,有几个步骤,创建SQL语句,发送到数据库处理,取得结果。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  实现就是怎样完成这个抽象步骤,如发送到数据库,需要结合具体的数据库,考虑怎样完成这个步骤等。并且同一步骤可能存在不同的实现,如对不同的数据库需要不同的实现。

  现在我们假设一个情况,也是WEB中经常碰到的,在一个page有输入框,如客户信息的姓名,地址等,输入信息后,然后按查找按钮,把查找的结果显示出来。
  
  我们现在假设查找客户信息和帐户信息,它们在不同的表中。
  
  但是我们的系统面对两种人群,总部的它们信息保存到Oracle数据库,但是各个分公司的数据保存在Sybase中,数据库的位置等各不相同,这两种的操作不同。

  下面是我们一般首先会使用的方式,使用if else进行,判定,这样使用系统难以维护,难以扩展,不妨你增加一种查询,或者一种数据库试试?
  

  public class SearchAction(){
  public Vector searchData(string ActionType,String DBType){
  String SQL="";
  if(ActionType.equal("查找客户信息")){
  //假如是查询客户信息,拼SQL语句从客户表中读取数据
  SQL="select * from Customer "

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  if(dbType.equal("oracle")){
  //从总部数据库读取,数据库为Oracle
  String connect_string ="jdbc:oracle:thin:hr/hr@localhost:1521:HRDB";
  DriverManager.registerDriver (new oracle.jdbc.OracleDriver());
  Connection conn = DriverManager.getConnection (connect_string);
  // Create a statement
  Statement stmt = conn.createStatement ();
  ResultSet rset = stmt.executeQuery (SQL);
  //以下省略部分动态从数据库中取出数据,组装成Vector,返回
  ..................................
  ...................................
  }else(dbType.equal("sybase")){
  //从分公司数据库读取,数据库为Sybase
  String connect_string ="jdbc:sybase:Tds:cai/cai@192.168.1.12:1521:FIN";
  DriverManager.registerDriver (new com.sybase.jdbc.SybDriver());
  Connection conn = DriverManager.getConnection (connect_string);
  // Create a statement
  Statement stmt = conn.createStatement ();
  ResultSet rset = stmt.executeQuery (SQL);
  //以下省略部分动态从数据库中取出数据,组装成Vector,返回
  ..................................
  ...................................

  }

  }else if(ActionType.equal("查找帐户信息")){
  //假如是查询帐户信息,拼接SQL语句从帐户表中读取数据
  SQL="select * from Account "
  if(dbType.equal("oracle")){
  ..........................
  ..........................
  (作者注:此处省略从oracle读取,约300字)

  

展开更多 50%)
分享

猜你喜欢

从重构的角度学习bridge设计模式

编程语言 网络编程
从重构的角度学习bridge设计模式

无废话C#设计模式之十二:Bridge

编程语言 网络编程
无废话C#设计模式之十二:Bridge

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

换个角度看页面重构中的语义化

Web开发
换个角度看页面重构中的语义化

学习WEB标准心得:网页重构的思路

Web开发
学习WEB标准心得:网页重构的思路

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

浅谈游戏设计中值得学习的移动引导模式

平面设计 海报设计 广告设计 画报设计 签名设计 服装设计 名片设计 画册设计 版式设计 商标设计
浅谈游戏设计中值得学习的移动引导模式

从文艺角度学习文青的摄影精神

摄影 人像摄影 静物摄影
从文艺角度学习文青的摄影精神

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

键盘代替鼠标 Alt+Esc键轻松切换窗口

键盘代替鼠标 Alt+Esc键轻松切换窗口

Visual C#2005中使用正则表达式

Visual C#2005中使用正则表达式
下拉加载更多内容 ↓