java 桥接模式

上传人:第*** 文档编号:37804680 上传时间:2018-04-22 格式:DOC 页数:8 大小:170.50KB
返回 下载 相关 举报
java 桥接模式_第1页
第1页 / 共8页
java 桥接模式_第2页
第2页 / 共8页
java 桥接模式_第3页
第3页 / 共8页
java 桥接模式_第4页
第4页 / 共8页
java 桥接模式_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《java 桥接模式》由会员分享,可在线阅读,更多相关《java 桥接模式(8页珍藏版)》请在金锄头文库上搜索。

1、JAVAJAVA 桥接模式桥接模式一一. . 从树谈起从树谈起 基本上所有人都知道树这个概念。 稍微深究.NET 本质的人会懂得,.NET 有个对象树。 学习 ASP.NET 的人肯定会知道,Web 上有个控件树。 哪怕是只学习过数据结构应付考试的大学生也会知道 Tree 这个概念。 二二. . 把需求扩展成树把需求扩展成树 举个我们最常用的 Photoshop 做例子。 在 Photoshop 中,有许多图形工具,比如星星,比如方形,再比如圆形等等。 在 Photoshop 中,不用多说,也有很多种颜色供我们选择。 于是就产生了,红色的星星,绿色的星星。红色的方形,绿色的方形等等。 看看所产

2、生的树: 现在是三种图形,三种颜色,于是我们就一共去声明了九个类,当然我们还不 算中间过程中的辅助父类。 如果我们现在是 18 种图形,12 种颜色,那么我们就需要写 18*12 个类,然后 加上 12 个颜色的类和一个总父类,一共我们需要 12*18+12+1=229 个类。 让我们记住这个数字。 希望大家不要和我抬杠说,我们可以把颜色写成 Color 然后动态传入。我们这 里是假设并不存在 Color 这个属性,而需要我们自己去实现。 三三. . 对象爆炸对象爆炸 这个词我已经在两个设计模式中提到了。 在 中,我就用到了这个词。 当然,这里的爆炸并没有上篇文章中的那么恐怖。 但是追寻完美的

3、我们也应该去改善他。 那就让我们开始想办法。 四四. . 多继承?多继承? 学习 C+的我,第一个想到的是多继承。 用多继承描述这个模型再恰当不过了。 声明 18 个图形的类,然后声明 12 个颜 色的类,然后用具体的图形类去多继承。 让我们看看这个表述图: 错综复杂的线看上去可能有些乱,但是我想大家应该都明白这个意思。 理解倒是容易理解了,可是这个时候我们再来看一下这个类的数量: 颜色 12+颜色父类 1+图形 18+图形父类 1+12*18,这个数字似乎比我们之前的那 个数字还要大。 也许我会为他辩驳说他牺牲了空间而换取了可读性,但是可怜的 C#不支持多继 承? 五五. . 多继承为何被抛

4、弃?多继承为何被抛弃? 1. 从实际应用讲,B 继承 A 并且重写了方法,C 继承 A 并且重写了方法,那么 这个时候 D 多继承了 B 和 C,那么他究竟是继承 B 的方法还是 C 的方法呢? 2. 从面向对象角度讲,每个类只应有一个父类,就像说一个人只能有一个父亲 一样。 但是多继承毕竟对我们来说还是比较易用的,他很容易理解,就像段中的颜色 和图形一样。 抛弃多继承是从 Java 开始的,关于历史遗留的多继承问题,他们如何去解决呢?让我们深入 Java 阵营内部去探索答案。 六六. . 深入深入 JavaJava 阵营,寻找答案阵营,寻找答案 方法一:用接口来取代继承,这个我不敢兴趣,从前

5、我也知道,我想知道点别 的。 方法二:实际上,在我们使用继承时,总有着一个主要继承点和次要继承点。 然后我们应该分清主次,然后去继承那个主要继承点,然后用 AOP 去解决次要 继承点的问题。 七七. . AOP+OOPAOP+OOP = CompleteComplete OOPOOP AOP,面向切面编程,也称面向方面编程。大多数的设计模式都是在搞接口和外 部之间的关系,而很少去深入类的内部去解决问题。AOP 则是解决了这个问题。举个例子,我们在做项目的时候常常需要去记录日志,那么这个日志常常是水 平地分布在各个类中,但是其实这个日志功能与这个类的核心功能并无本质联 系,这其实违背了对象的单一

6、职责原则,更重要的使这些代码分散个各个角落, 非常不容易维护。 AOP 其实就是采用一种“横切”技术,深入对象的内部,然后将那些影响了多 个类的功能写入一个模块,然后注入到各个类中。从而实现了功能的分离,这 个常常用于日志管理,安全控制等次要继承点。 但是我在网上搜了一下,微软官方并未提供 AOP 框架技术,而都是些子实现框 架,尚无 Java 的 Spring 之类广泛使用的标准。 八八. . 退而求其次退而求其次 Spring 的两个关键词:控制反转,依赖注入。 既然我们无法依赖注入,那么我们就普通注入吧。 废话这么多,让我们来步入正题:桥接模式。先来简单地看下结构图: 讲解之前,让我们先

7、看看桥接模式的意思:将抽象部分与实现部分相分离,使 他们都可以相互变化。 九九. . 代码演化代码演化 让我来先讲解一下这个模式的大概思路。 仍然用上面的例子做讲解,按照桥接模式,我们应该把所有可变化的点给抽离 出来,然后组合到稳定的部分。先看看代码吧。 class Program static void Main(string args)PhotoShop ps = new PhotoShop(new RedColor(),new Star();ps.Draw(); interface IColor class RedColor : IColor class BlueColor : ICol

8、or class YellowColor : IColor interface IGraphics class Rectangle:IGraphics class Star:IGraphics class Round : IGraphics class PhotoShop IColor color;IGraphics graphics;public PhotoShop(IColor c, IGraphics g)this.color = c;this.graphics = g;public void Draw()Console.WriteLine(color.GetType().ToStrin

9、g();Console.WriteLine(graphics.GetType().ToString(); 这个时候的结构图应该是这样的: 这个时候让我们来计算一下类的总数: 12 个颜色类+18 个图形类+1 个我们的图形=31 个类。是不是很少呢? 十十. . 探微而知著,追本而溯源探微而知著,追本而溯源 世间本没有路,走得人多了,也便成了路。 其实世间本没有模式,只是原则总结了,便成了模式。 模式是可以衍生的,而原则是相对稳定的,那就让我们从这个模式中去挖掘原 则。 在文章伊始,我们想到的都是什么?面向对象三原则继承多态封装中的第一个: 继承。于是引发了对象爆炸。而用组合,解决了这个问题。

10、 还记得一个很老套的面试题,抽象类和接口的区别。 那就让我们从这个面试题谈起: 1. 接口是行为的契约,而抽象类是特征的抽象。一个是 can do,一个是 is a。 2. 面向对象设计原则说:组合优于继承。 好了,让我们来看第二点,为什么说组合优于继承,而不说组合取代继承呢? 让我们继续向下看。 十一十一. . 精益求精精益求精 组合优于继承,而不是组成取代继承。 上面的代码,如果不仅仅要求颜色和形状,还要求更多,那么我就要写很多很 多的属性,好麻烦。 而且更重要的是,如果有这样的需求,我现在有 12 种颜色,然后有 3 种形状, 分别是方形,圆形和星星,有两种笔,分别是铅笔和蜡笔。但是我现

11、在铅笔只 对应方形和星星,蜡笔只对应圆形和星星。也就是说不存在圆形铅笔和方形蜡 笔。这样的话我的组合不是浪费了么?而且客户很可能组合错呀? 是的,不要一味去考虑组合。再重复一次我很爱说的话:模式是为了变化, 不要为了模式而模式,我们只需要抽离出变化点就可以了! 如果这样,那我们就写好稳定的部门,有两种选择: 或者是把颜色的作为父类,这个就是看我们个人的选择了。 这样下来,假设说有很多的类,但是我们只有少数的选择,是不是我们的类更 少了呢? 十二十二. . 有一种能力叫做取舍有一种能力叫做取舍 这句话是我在上看到的,原文用于 HTML 在 Web 标准上 的选择遵循上。 这里我想说,桥接模式难并

12、不是难在理解,而是难在应用。难在我们怎么去抽 取出这个变化点,而保留住我们稳定点。 这个就是设计人员的取舍能力了! 十三十三. . 举一而反三举一而反三工厂还是不工厂工厂还是不工厂 工厂模式,这个我相信大家都在熟悉不过了。 去掉丑陋的 if-else,然后用工厂给独立成为类。 应对数据库的变化,用抽象工厂+反射+web.config 去搞定不同数据访问层。 应对不同验证方式,用工厂+反射。 这几乎成了 Petshop 的所有层通用的东西。但是在我们的项目中,真的需要这 样么? 首先受 if-else,他丑陋在哪里,是因为一旦我们引入了新的逻辑条件,就需 要修改源码重新编译。 然后是数据库和验证方式,我想,几乎很少有公司真的去修改数据库和他们所 习惯的产品的验证方式。 如果是这样,也就是说这些都是固定的,那么我们还有必要为了模式而模式地 去用工厂么? 十四十四. . 桥接总结桥接总结 桥接模式(Bridge pattrern):将抽象部分与实现部分向分离,使他们都可以 独立变化。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号