先说一下我以前对桥接模式的理解:当每个类中都使用到了同样的属性或方法时,应该将他们单独抽象出来,变成这些类的属性和方法(避免重复造轮子),当时的感觉是和三层模型中的model有点单相似,也就是让model独立出来就可以上蹿下跳^_^

现在看来,这句话,前半句是对的,后半句,有点牵强。
具体实现方式(举例场景:每种手机可以装多个操作系统):

1、将可变的地方抽象为接口,并将可变的情况继承自接口并实现

    public interface ISystem
{
string System();
}
public class IOSSystem : ISystem
{
public string System()
{
return "IOS";
}
}

2、定义一个基类,将可变的地方使用接口申明为属性

    public abstract class BasePhone
{
public ISystem CurrentSystem = null;//可变的地方//public abstract string System();
public abstract void Call();
public abstract void Message();
}

3、将具体的实现类继承自基类

public class Lumia : BasePhone
{
public override void Call()
{
Console.WriteLine("使用{0} {1}打电话", this.GetType(), CurrentSystem.System());
} public override void Message()
{
Console.WriteLine("使用{0} {1}发短信", this.GetType(), CurrentSystem.System());
}
}

4、在使用时,根据情况,将可变属性赋值

BasePhone lumia = new Lumia();
lumia.CurrentSystem = new IOSSystem();
lumia.Message();
lumia.Call();

桥接模式的使用场景,当类和行为呈现m*n的代码爆炸情况时,在基类中使用接口封装变化点,在使用时,根据情况组合。增加程序的扩展性,使变化点具有扩展性。

为什么要有基类呢?我觉得是为了约束类的不变因素。

最新文章

  1. java第二次作业
  2. bestcoder杯回顾
  3. Sold out
  4. 【python爬虫】根据查询词爬取网站返回结果
  5. ExtJS学习-----------Ext.Array,ExtJS对javascript中的Array的扩展
  6. robot framework 使用四:分层设计和截图以及注意事项
  7. hdu 5664 Lady CA and the graph(树的点分治+容斥)
  8. 用Hashcat每秒计算1.4亿个密码,破解隔壁WIFI密码
  9. P2286 [HNOI2004]宠物收养场
  10. 面试官: 说说看, 什么是 Hook (钩子) 线程以及应用场景?
  11. java基础之集合框架--使用ArrayList类动态 存储数据
  12. 举例说明$POST 、$HTTP_RAW_POST_DATA、php://input三者之间的区别
  13. sklearn-adaboost
  14. Java——this关键字
  15. day87
  16. 团队作业——Beta冲刺1
  17. sklearn5_preprocessing数据标准化
  18. go语言之进阶篇字符串转换
  19. C 预处理
  20. openwrt lamp

热门文章

  1. Nginx日志监控 使用 goaccess查看nginx日志
  2. java8--- Optional的使用
  3. vue axios应用
  4. pip找不到的安装包
  5. django项目学习之异步框架celery
  6. Java8与JDK8和JDK1.8有什么区别?
  7. 20170309工作笔记--------如何用好dialog,想变什么样就变成什么样
  8. 如何遍历div里面的文本内容,用each方法,
  9. js日期格式验证
  10. Cookie&Session笔记