免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1229 | 回复: 0
打印 上一主题 下一主题

桥模式(Bridge) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-23 20:11 |只看该作者 |倒序浏览
定义:将对某个问题抽象的不同形式分别与该问题的具体实现部分相互分离,使他们都可以独立变化,并且能够动态的结合!
举个例子:
   在某个web管理系统中,需要对给定的耨个字符串进行转换,但是具体的转化功能要求可能是进行大写转换,小写转换以及将英文转换为中文;同时还要对转换的结果进行日志输出,而日志输出的形式可能是控制台输出,浏览器的页面输出,日志文件的输出,手机屏幕输出,或者输出并保存到数据库中!
  对问题进行分析和理解:
其中的一个变化因素是对字符串进行转化处理,另一个是进行日志记录!
1.找出在桥模式中描述的问题的抽象和问题抽象的不同实现形式
  问题中是要求对字符串进行不同形式的转换,可以把该要素看成是问题的抽象
  对具体转换的要求可能是大写,小写或者转换为中文,把该要素看成是对某个问题抽象的不同实现形式
2.找出桥模式中描述的问题的实现和问题实现的具体形式
  要求对转换后的字符串进行日志记录,是问题的实现
  在控制台输出,页面输出,日志文件输出手机屏幕输出等是问题实现的具体形式!
3.代码:
   对字符串进行转换的抽象类:   

public abstract class TransferAbstract{
protected OutPutTransferResultAbstract oneOutPutTransferResult=null;
public TransferAbstract(){}
public String doTransferText(String inputStr,int outPut_Type){
oneOutPutTransferResult=TransferResult_Factory.newOutPutTransferResult(outPut_Type);
String transferResult=doTransfer(inputStr);
oneOutPutTransferResult.outPutTransferResultMethod(transferResult);
return transferResult;
}
abstract public String doTransfer(String inutStr);
}
   对字符串进行小写转换的类:
public class TransferAbstract_LowerCase extends TransferAbstract{
public TransferAbstract(){}
public String doTransfer(String inputStr){
String transfer_Result=inputStr.toLowerCase();
System.out.println("已经将"+inputStr+“转换为”+transfer_Result);
return transfer_Result;
}
}
   对字符进行大写转换的类:
public class TransferAbstract_UpperCase extends TransferAbstract{
public TransferAbstract(){}
public String doTransfer(String inputStr){
String transfer_Result=inputStr.toUpperCase();
System.out.println("已经将"+inputStr+“转换为”+transfer_Result);
return transfer_Result;
}
}
对字符串进行翻译:
public class TransferAbstract_Translate extends TransferAbstract{
public TransferAbstract(){}
public String doTransfer(String inputStr){
String transfer_Result="已经将"+input+"转化为中文";
System.out.println(transfer_Result);
return transfer_Result;
}
}
对转化结果进行日志记录的抽象类:
public abstract class OutPutTransferResultAbstract{
public OutPutTransferResultAbstract(){}
abstract public boolean outPutTransferResultMethod(Srting oututResult);
}
将转化后的结果在控制台输出:
public class OutPutTransferResult_Control extends OutPutTransferResultAbstract{
public OutPutTransferResult_Control(){}
public boolean outPutTransferResultMethod(String outputResult){
System.out.println("将转换后的结果为"+outputResult+"并进行了日志记录");
return true;
}
}
将转换后的结果记录在日志文件中:
public class OutPutTransferResult_LogFile extends OutPutTransferResultAbstract{
private Logger logger=Logger.getLogger(this.getClass().getName());
public OutPutTransferResult_LogFile(){}
public boolean outPutTransferResultMethod(String outputResult){
logger.log(Level.INFO,"转换后的结果为:"+outputStr+"并已经进行了日志的记录");
return true;
}
}
将转换后的结果在页面上输出:
public class OutPutTransferResult_JspFile extends OutPutTransferResultAbstract{
public OutPutTransferResult_JspFile(){}
public boolean outPutTransferResultMethod(String outputResult){
System.out.println("将转换后的结果为"+outputResult+"并在浏览器上输出");
return true;
}
}
创建实现日志记录的实现类对象的实例工厂类:
public class TransferResult_Factory{
public static final int Control=1;
public static final int LogFile=2;
public static final int JspFile=3;
public TransferResult_Factory(){}
public static OutPutTransferResultAbstract newOutPutTransferResult(int outPut_Type){
OutPutTransferResultAbstract oneOutPutTransferResult=null;
switch(outPut_Type){
case Contril:
     oneOutPutTransferResult=new oneOutPutTransferResult_Control();
     break;
case JspFile:
     oneOutPutTransferResult=new oneOutPutTransferResult_JspFile();
     break;
case LogFile:
     oneOutPutTransferResult=new oneOutPutTransferResult_LogFile();
     break;
}
return oneOutPutTransferResult;
}
}


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/76927/showart_1662015.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP