经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » 设计模式 » 查看文章
设计模式系列 - 桥接模式
来源:cnblogs  作者:hippieZhou  时间:2018/12/17 9:43:27  对本文有异议

使用桥接模式可以将类型的抽象和具体实现进行分离,两者通过桥接模式进行关联,从而达到解耦

介绍

桥接模式属于结构型模式。在现实世界中,我们装修房子时,布线的工人和安装空调的工人之间可以同时工作,不用互相依赖。而对于屋主人来讲也不用关系他们具体时怎么工作的,只需要等他们完成即可。在软件开发中,当我们面对一个业务中两个独立的子业务时,使用桥接模式是一个不错的选择。

类图描述

由上图我们可以看到,我们定义了一个抽象类 Shape 来继承 IDrawAPI 接口,然后定义两种绘制方式 GreenCircleRedCircle ,最后上层通过将具体绘制传递给 Circle 即可。

代码实现

1、定义绘制接口

  1. public interface IDrawAPI
  2. {
  3. void DrawCircle(int radius, int x, int y);
  4. }

2、定义具体绘制类

  1. public class RedCircle:IDrawAPI
  2. {
  3. public void DrawCircle(int radius, int x, int y)
  4. {
  5. Console.WriteLine($"Drawing Circle[color:red,radius:{radius},x:{x},y:{y}]");
  6. }
  7. }
  8. public class GreenCircle:IDrawAPI
  9. {
  10. public void DrawCircle(int radius, int x, int y)
  11. {
  12. Console.WriteLine($"Drawing Circle[color:green,radius:{radius},x:{x},y:{y}]");
  13. }
  14. }

3、定义抽象形状类

  1. public abstract class Shape
  2. {
  3. protected IDrawAPI drawAPI;
  4. protected Shape(IDrawAPI drawAPI) => this.drawAPI = drawAPI;
  5. public abstract void Draw();
  6. }

4、定义具体形状类

  1. public class Circle:Shape
  2. {
  3. private int x, y, radius;
  4. public Circle(int x,int y,int radius,IDrawAPI drawAPI) : base(drawAPI)
  5. {
  6. this.x = x;
  7. this.y = y;
  8. this.radius = radius;
  9. }
  10. public override void Draw()
  11. {
  12. drawAPI.DrawCircle(radius, x, y);
  13. }
  14. }

5、上层调用

  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. Shape redCircle = new Circle(100, 100, 10, new RedCircle());
  6. redCircle.Draw();
  7. Shape greenCircle = new Circle(100, 100, 10, new GreenCircle());
  8. greenCircle.Draw();
  9. Console.ReadKey();
  10. }
  11. }

总结

桥接模式将抽象和实现进行了分离,让它们能独立变化,使得具体的实现细节不用暴露给上层。

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

本站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号