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

2016-02-19 13:46 5 1 收藏

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

【 tulaoshi.com - 编程语言 】

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

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

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

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

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

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

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

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

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

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

  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字)

  

来源:https://www.tulaoshi.com/n/20160219/1605162.html

延伸阅读
作为设计师,最关心的也许就是排版好不好看、图片美不美观、视觉炫不炫,我们尽可能的去把设计稿做的最漂亮,然后就把硕大的PSD文件就直接发给重构了,殊不知这个时候重构正在恨你: 我擦,这么大的PSD,还木有打开!本来就开了各种浏览器编辑器神马的又要打开若大的PSD文件,机子要卡死了!!!机子卡死就算了吧,打开一看,我去,几百个图层呀!...
大家都知道,面对一个设计需求,每个设计师都有不同的领悟和表现手法,同样的,国外会有很多优秀的设计师针对著名的站点来做一些概念设计、重设计(Redesign )。 设计是变通的,每一种界面都能有无数的展现。无论是海报、T恤还是网站的设计,设计师总是能找到不同手法来体现同一设计概念。 当然,重设计往往不会打优秀案例的主意,因为它们确...
在那些灾难性的LOGO重新设计案例这篇文章中,我们简单剖析了一些失败的Logo重设计的案例,共7例。 本文作为该文章的姊妹篇,将重点讲述一些优秀的Logo重设计案例,共8例。 一般来说,知名企业进行Logo更换时,大家都会擦亮了眼睛去观察新设计,会对新Logo评头品足一番。而且大多数情况下,由于习惯因素,通常会认为新Logo不如旧Logo。 什么...
1、优化import 简而言之,通过优化import的设置可以达到以下的目的: 去除无用的import语句:如在类中没有使用任何包中的类,则这个包的import语句可以删除。 设置包的阈值:当前类引用包中类的数目大于这个阈值时,引入整个包(如import java.io.*),否则为包中每个被引用的类单独指定的一个import语句(如import java.io.File)。 ...
标签: 摄影
什么叫做文青一直很模糊,没有人能真的说出个定论。但单从比较文艺、感性的角度去看摄影,那的确有许多值得学习之处。推荐一些我认为摄影人都可以学习、参考的地方吧 什么叫做文青一直很模糊,没有人能真的说出个定论。但单从比较文艺、感性的角度去看摄影,那的确有许多值得学习之处。推荐一些我认为摄影人都可以学习、参考的地方吧。一起...

经验教程

870

收藏

93
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部