经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » 设计模式 » 查看文章
Bridge桥接模式
来源:cnblogs  作者:大师兄石头  时间:2021/2/18 15:34:45  对本文有异议

>>返回《C#常用设计模式》

1. 简介

  • 定义
    • 将抽象部分与它的实现部分解耦,使得两者都能够独立的变化
  • 蜡笔与毛笔
    • 蜡笔有不同的大小和颜色,需要用哪个笔就用哪个笔
    • 毛笔分为不同大小,却只有一个调色盘,里面装着不同的颜料,我们需要什么颜色,就用对应大小的毛笔去蘸对应的颜料
    • 二者相比,我倒是觉得还是蜡笔方便,但是,试想一下,如果我们笔的大小变化有很多,颜色我也要越多越好,以应对变化
    • 毛笔只要提供对应大小的毛笔,颜色只要放到调色盘里就OK了,数量相对少很多,我们只要带着不同大小的笔和调色盘就好了
    • 桥接模式,就是要像毛笔这样应对不同(多维度)变化而来的。
  • 类图

2. 示例

  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Text.RegularExpressions;
  7. namespace ConsoleApplication4
  8. {
  9. //client
  10. class Program
  11. {
  12. static void Main(string[] args)
  13. {
  14. UserBLL bll1 = new CustomerUserBLL();
  15. bll1.SetDAL(new UserMSSQLDAL());
  16. bll1.Add();
  17. Console.ReadKey();
  18. Console.WriteLine();
  19. UserBLL bll2 = new CustomerUserBLL();
  20. bll2.SetDAL(new UserMySQLDAL());
  21. bll2.Add();
  22. Console.ReadKey();
  23. }
  24. }
  25. #region 抽象
  26. //Abstracttion
  27. public abstract class UserBLL
  28. {
  29. private UserDAL dal;
  30. public void SetDAL(UserDAL userDAL)
  31. {
  32. dal = userDAL;
  33. }
  34. public virtual void Add()
  35. {
  36. dal.AddUser();
  37. }
  38. }
  39. //Implementor interface
  40. public abstract class UserDAL
  41. {
  42. public abstract void AddUser();
  43. }
  44. #endregion
  45. //BLL 实现 RefinedAbstracttion
  46. public class CustomerUserBLL : UserBLL
  47. {
  48. public override void Add()
  49. {
  50. Console.WriteLine("Customer-User-BLL Add");
  51. base.Add();
  52. }
  53. }
  54. //MySQL DAL ConcreteImplementorA
  55. public class UserMySQLDAL : UserDAL
  56. {
  57. public override void AddUser()
  58. {
  59. Console.WriteLine("--User-My-SQL-DAL AddUser");
  60. }
  61. }
  62. //MSSQL DAL 实现 ConcreteImplementorB
  63. public class UserMSSQLDAL : UserDAL
  64. {
  65. public override void AddUser()
  66. {
  67. Console.WriteLine("--User-MS-SQL-DAL AddUser");
  68. }
  69. }
  70. }

3. 优缺点

3.1. 优点

  • 分离抽象接口及其实现部分,从而可以获得更多维度组合对象。即可以搭建很多的桥
  • 桥接模式可取代多层继承方案,极大减少了子类的个数
  • 提高了系统的可扩展性,多维度间任意扩展需要扩展的一个维度,不需修改原有系统,符合开闭原则

3.2. 缺点

  • 会增加系统的理解与设计难度,需要对抽象层进行编程
  • 要正确的分别出独立变化的维度,使其使用范围有一定局限性

3.3. 适用的环境

  • 如果一个系统需要在抽象化和具体化之间增加更多的灵活性,避免在两个层次间建立静态的继承关系,可以用桥接模式在抽象层建立关联关系
  • 抽象部分和实现部分可以以继承的方式独立扩展而不互相影响,系统需要对抽象化角色和实现化角色进行动态耦合
  • 一个类存在两个或多个独立变化的维度,且各自需要独立的进行扩展
  • 对于不希望使用继承或因为多层继承导致系统类的个数急剧增加的系统,桥接模式很适用

原文链接:http://www.cnblogs.com/BigBrotherStone/p/bridge.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号