假如一个系统需要点心做法加入报表模块,主要的开发点是数据的获取和报表的显示方式。数据的获取可能是从系统数据库中读取数据,也可能是从Excel文件中读取数据,还可以是通过接口获取数据等。报表的显示方式也繁多,比如用柱状图显示,用表格显示,用折线图显示等。如果对每一种情况都设计一个类,那么要实现该系统需要的类的数量是非常庞大的(数据的获取方式*报表显示方式)。那么如何设计这样的系统呢?本文通过该案例,介绍桥接模式。
桥接模式重要等级 桥接模式难度等级
英文定义”Decouple an abstraction from its implementation so that the two can vary independently.”。
将抽象部分与它的实现部分分离。使他们都可以独立地变化。
桥接模式主要包括以下角色:
(1)Abstraction(抽象类)
(2)RefinedAbstraction(扩充抽象类)
(3)Implementor(实现类接口)
(4)ConcreteImplementor(具体实现类)
以博文开头的报表模块为例,用桥接模式设计该报表模块。通过分析,该实例类图如下所示:
Report(抽象报表类)
abstract class Report{ private CollectData data; internal CollectData Data { get => data; t => data = value; } public void Show() { data.Collect(); ShowByChart(); } protected abstract void ShowByChart();}
CollectData(收集数据接口)
interface CollectData{ void Collect();}
FromInterface(接口获取数据)
class FromInterface : CollectData{ public void Collect() { Console.Write("从系统接口获取数据非定向生,"); }}
FromExcel(Excel文件读取数据)
class FromExcel : CollectData{ public void Collect() {四面楚歌的故事 Console.Write("从Excel文件获取数据,"); }}
FromDataBa(数据库读取数据)
class FromDataBa : Collect鱼怎么炖才好吃Data{ public void Collect() { Console.Write("从数据库获取数据,"); }}
GridReport(数据表格报表)
class GridReport : Report{ protected override void ShowByChart() { Console.WriteLine("用数据表格展示数据。"); }}
BarChartReport(柱状图报表)
class BarChartReport : Report{ protected override void ShowByChart() { Console.WriteLine("用柱状图展示数据。"); }}
LineChartReport(折线图报表)
class LineChartReport:Report{ protected override void ShowByChart() { Console.WriteLine("用折线图展示数据。"); }}
测试代码
class Progra遥感专业就业前景m{ static void Main(string[] args) { Console.WriteLine("报表A:"); Report report = new GridReport(); report.Data = new FromExcel(); report.Show(); Console.WriteLine("报表B:"); report = new BarChartReport(); report.Data = new FromDataBa(); report.Show(); Console.WriteLine("报表C:"); report = new LineChartReport(); report.Data = new FromInterface(); report.Show(); Console.ReadKey(); }}
运行结果
(1)抽象化和实现化脱耦,使得二者可以独立地变化。由于抽象化和实现化不在同一继承层次结构中,因此他们可以分别用他们的子类进行组合,形成多维度的组合对象
(2)桥接模式可以达到多继承的效果,又不会违背类的单一职责原则。
(3)系统可扩展性很高,桥接模式各个维度的变化是独立地,因此任意扩展一个维度,都不会影响其他维度。
(4)透明度高。用户面向抽象层,对不同的维度通过聚合关系进行组合。
(1)桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。
(2)桥接模式要求正确识别出系统中独立变化的维度,因此其使用范围具有一定的局限性。
本文地址:https://blog.csdn.net/chen_xuyuan/article/details/85925870
本文发布于:2023-04-03 18:47:48,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/7259b2ab7244e06cf70a6c6ff89f7eb7.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:桥接模式学习总结.doc
本文 PDF 下载地址:桥接模式学习总结.pdf
留言与评论(共有 0 条评论) |