设计模式之第10章-桥接模式(Java实现)
设计模式之第10章-桥接模式(Java实现)
“一入软件深似海,从此早睡是路人。黑夜给了我黑色的眼睛,我却用他去寻找八阿哥。”“怎么了,又来那么多的感慨啊。”“还能有什么啊,老板是说让换个APP做,这个APP现在不行了,这都是这三个月来第4个APP了、、、”“这个啊,那不是简单的很么?”“简单,别闹了,你以为APP是大白菜啊,说有就有啊。”“这个时候就是我桥接模式出场的时候了~”
桥接模式之自我介绍
大家好,我的英文名字叫“Qiaojie Moshi”,我的中文名字叫桥接模式。(欸?哪里优点不对,哦,这小子,糊弄我呢,碎碎念一阵后作者对着桥接模式一阵拳打脚踢)。桥接模式鼻青脸肿的说“我的英文名字是、、、是Bridge Pattern”,不是先前说的那个,开个玩笑而已、、、至于下那么重的手么。“嘿嘿,那个手滑了”。相关定义如下:Decouple an abstraction from its implementation so that two can vary independently。(作者盯着桥接模式。)“老大,这次是真的,我没开玩笑。”“哦,没事,我就随便看看。”翻译过来是将抽象和实现解耦,使得两者可以独立地变化。我的重点就是“解耦”,如何让抽象和实现解耦就是需要了解的重点。下面先来看看桥接模式的类图:

现在来详细介绍下各个角色:
- Abstract:抽象化角色。主要职责是定义出该角色的行为,同时保存一个对实现化角色的引用,该角色一般是抽象类。
- Implementor:实现化角色。是接口或者抽象类,定义角色必需的行为和属性。
- RefinedAbstract:修正抽象化角色。实现接口或抽象类定义的方法和属性。
- ConcreteImplementor*:具体实现方法类。
桥接模式之自我分析
身为一个“每日三省吾身之人”,缺点早已改进,因此剩下的也就只有优点了(作者按:别嘚瑟了,赶紧说重点。)别扔鸡蛋啊,咳咳,那个,我的优点有下面这几条:
- 分离接口及其实现部分。这也是我的主要特点,毕竟也是为了解决继承的缺点而提出的设计模式嘛。
- 优秀的扩充能力。
- 实现细节对客户的透明。因此你们完全不用关心细节的实现,它已经由抽象层通过聚合关系完成了封装。
桥接模式之实现
既然你们不信,看来今天不露两手是镇不住你们了,好了,看我的大招:
既然说到了APP,那我们就来谈谈APP,首先是抽象APP类:
public abstract class App{
//首先要设计,什么数据库设计、框架选取、概要设计、详细设计等等
public abstract void beDesigned();
//然后是编码实现
public abstract void beCoded();
//最后是测试
public abstract void beTest();
}
假设是社交类APP:
public class ChatApp extends App{
//首先要设计,什么数据库设计、框架选取、概要设计、详细设计等等
public abstract void beDesigned(){
System.out.println("调研,写文档、写文档、、、");
}
//然后是编码实现
public abstract void beCoded(){
System.out.println("我是一个程序员,加班Coding中");
}
//最后是测试
public abstract void beTest(){
System.out.println("test、test、test、、、");
}
}
然后APP产品自然是由互联网公司生产的了,下面是抽象的公司类:
public abstract class Corp{
//定义一个抽象APP对象,但是不知道具体是什么
private App app;
//构造函数,由子类定义传递具体产品
public Corp(App app){
this.app = app;
}
//制作APP
public void developApp(){
this.app.beDesigned();
this.app.beCoded();
this.app.beTest();
}
}
这里是有参构造,因为继承的子类需要重写自己的有参构造函数,把APP的类传进来,首先看一下APP公司的实现:
public class AppCorp extends Corp{
//生产的App 待定,据需求而定
public AppCorp(App app){
super(app);
}
//生产App
public void developApp(){
super.developApp();
System.out.println("要什么制作什么APP");
}
}
具体使用看如下的场景类:
public class Client{
public static void main(String[] args) {
AppCorp appCorp = new AppCorp(new ChatApp());
appCorp.developApp();
}
}
怎么样,是不是很厉害,是不是对我的敬仰犹如滔滔江水奔流不止啊~(作者按:滚。众读者已吐得天昏地暗。)
桥接模式之应用场景
刚刚桥接模式有事走了(别拉我,让我讲完啊~~~),所以由我给大家继续讲解应用场景:
- 当你不希望抽象和实现之间有一个固定的绑定关系的时候。
- 类的抽象和它的实现都应该可以通过生成子类的方法加以扩充。
- 对一个抽象的实现部分的修改应对客户不产生影响。
- 你想对客户完全隐藏抽象的实现部分。
- 有许多的类要生成。
- 你想对多个对象间共享实现,但同时要求客户并不知道这一点。
以上就是本次要说的全部内容,荆轲刺秦王,设计模式心中藏~(好像有什么不对)
PS:本博客欢迎转发,但请注明博客地址及作者~
博客地址:http://www.cnblogs.com/voidy/
博客新址:http://voidy.net
<。)#)))≦
设计模式之第10章-桥接模式(Java实现)的更多相关文章
- 设计模式之第7章-外观模式(Java实现)
设计模式之第7章-外观模式(Java实现) “鱼哥,知道怎么把大象装进冰箱里面么?”(作者按:这么简单的问题还想考我,早了几百年吧.)“把大象装进冰箱里,一共需要三步:第一步,把冰箱门打开:第二步,把 ...
- 设计模式之第22章-组合模式(Java实现)
设计模式之第22章-组合模式(Java实现) “鱼哥,有没有什么模式是用来处理树形的“部分与整体”的层次结构的啊.”“当然”“没有?”“有啊.别急,一会人就到了.” 组合模式之自我介绍 “请问你是?怎 ...
- 设计模式之第21章-状态模式(Java实现)
设计模式之第21章-状态模式(Java实现) “what are you 干啥了?怎么这么萎靡不振?”“昨晚又是补新番,又是补小笼包,睡得有点晚啊.话说杨过的那个雕兄真是太好了,每天给找蛇胆,又陪练武 ...
- 设计模式之第20章-访问者模式(Java实现)
设计模式之第20章-访问者模式(Java实现) “嘿,你脸好红啊.”“精神焕发.”“怎么又黄了?”“怕冷,涂的,涂的,蜡.”“身上还有酒味,露馅了吧,原来是喝酒喝的啊.”“嘿嘿,让,让你发现了,今天来 ...
- 设计模式之第17章-备忘录模式(Java实现)
设计模式之第17章-备忘录模式(Java实现) 好男人就是我,我就是曾小贤.最近陈赫和张子萱事件闹得那是一个沸沸扬扬.想想曾经每年都有爱情公寓陪伴的我现如今过年没有了爱情公寓总是感觉缺少点什么.不知道 ...
- 设计模式之第16章-代理模式(Java实现)
设计模式之第16章-代理模式(Java实现) “现在朋友圈真是太让人蛋疼了啊.”“怎么说?”“一堆代理,各种卖东西的,看着好烦人.”“哎,删了呗.”“都是朋友,哪里好意思删啊.”“这倒也是...哎,迫 ...
- 设计模式之第14章-命令模式(Java实现)
设计模式之第14章-命令模式(Java实现) “小明,滚出去.”“小明,这个问题怎么做?”(可怜的小明无奈躺枪.小明:老师,我和你有什么仇什么怨,我和你有什么仇什么怨啊到底...老师:小明,滚出去.习 ...
- 设计模式之第11章-建造者模式(Java实现)
设计模式之第11章-建造者模式(Java实现) “那个餐厅我也是醉了...”“怎么了?”“上菜顺序啊,竟然先上甜品,然后是冷饮,再然后才是菜什么的,无语死了.”“这个顺序也有人这么点的啊.不过很少就是 ...
- 设计模式之第9章-原型模式(Java实现)
设计模式之第9章-原型模式(Java实现) “快到春节了,终于快放假了,天天上班好累的说.”“确实啊,最近加班比较严重,项目快到交付了啊.”“话说一到过节,就收到铺天盖地的短信轰炸,你说发短信就发吧, ...
随机推荐
- hadoop上传文件失败报错(put: Cannot create file/eclipse.desktop._COPYING_. Name node is in safe mode.)
解决办法: 离开安全模式方法:执行以下命令即可 bin/hadoop dfsadmin -safemode leave 若不处理安全模式的话,web服务无法启动,dfsadmin report结果异 ...
- Redis单机数据库
单机数据库 ·Redis服务器的所有数据库都保存在redisServer.db数组中,而数据库的数量则由redisServer.dbnum属性保存. ·客户端通过修改目标数据库指针,让它指向redis ...
- 【转载】WEB架构师成长之路
本人也是coding很多年,虽然很失败,但也总算有点失败的心得,不过我在中国,大多数程序员都是像我一样,在一直走着弯路,如果想成为一个架构师,就必须走正确的路,否则离目标越来越远,正在辛苦工作的程序员 ...
- python_34_文件操作3
f=open('yesterday',encoding='utf-8') print(f.tell())#文件句柄所在指针指向的位置,即光标在哪里(按字符计数) f.readline()#读一行 pr ...
- C#自增运算符(++)
一.C#自增运算符(++) 自增运算符(++)是将操作数加1. 1. 前缀自增运算符 前缀自增运算符是“先加1,后使用”.它的运算结果是操作数加1之后的值. 例如: ++x; // 前缀自增运算符 ...
- java 代码优化
Java程序中的内存管理机制是通过GC完成的,“一个对象创建后被放置在JVM的堆内存中,当永远不在应用这个对象的时候将会被JVM在堆内存中回收.被创建的对象不能再生,同时也没有办法通过程序语句释放”( ...
- Apache服务器的安装和配置
启动 Apache,让别人可以使用你机器上安装的 Apache 提供的 Web 服务,访问你机器上的网站.这种情况下你的机器就是服务器,别人的机器就是客户端 appsevApache服务器的基本安装 ...
- Sum All Primes-freecodecamp算法题目
Sum All Primes 1.要求 求小于等于给定数值的质数之和. 只有 1 和它本身两个约数的数叫质数.例如,2 是质数,因为它只能被 1 和 2 整除.1 不是质数,因为它只能被自身整除. 2 ...
- MySQL自学笔记_联结(join)
1. 背景及原因 关系型数据库的一个基本原则是将不同细分数据放在单独的表中存储.这样做的好处是: 1).避免重复数据的出现 2).方便数据更新 3).避免创建重复数据时出错 例子: 有供应商信息和产 ...
- matplotlib(二)——matplotlib控制坐标轴第一个刻度到原点距离
一.问题描述 具体问题是: 用python库matplotlib进行数据的图表展示: 横坐标是自定义统计值: 保存矢量图(svg),保存后发现横坐的第一个点离坐标原点距离较大,导致图形离y轴较远,让画 ...