java 之 桥接模式(大话设计模式)
桥接模式定义为:将抽象部分与它的实现部分分离,使它们都可以独立的变化。
第一次看设计模式的时候,不是很清楚这句话的意思,随着笔者的不断开发,发现有一种场景,
继承关系多了,不易于维护父类,而笔者认为桥接模式的出现很好的解决了这个问题。用聚合解决继承的父类难维护性。先看下桥接模式设计图。
大话设计模式-类图

以上类图很简单易懂,先看下笔者的demo
/**
* 操作接口
*/
public interface IOperate { public void operate();
}
/**
* 品牌父类
*/
public class Brand { private IOperate operate; public Brand(IOperate operate) {
super();
this.operate = operate;
} public void operate() {
operate.operate();
} public IOperate getOperate() {
return operate;
} public void setOperate(IOperate operate) {
this.operate = operate;
}
}
/**
* 玩游戏
*/
public class Game implements IOperate{
@Override
public void operate() {
System.out.println("玩游戏");
} }
/**
* 看通讯录
*/
public class MailList implements IOperate {
@Override
public void operate() {
System.out.println("看通讯录");
} }
/**
* M品牌
*/
public class MBrand extends Brand{ public MBrand(IOperate operate) {
super(operate);
} }
/**
* N品牌
*/
public class NBrand extends Brand{ public NBrand(IOperate operate) {
super(operate);
} }
/**
* 客户端
*/
public class Test {
public static void main(String[] args) {
IOperate game = new Game();
IOperate mailList = new MailList(); Brand nBrand = new NBrand(game);
nBrand.operate(); nBrand = new NBrand(mailList);
nBrand.operate(); Brand mBrand = new MBrand(game);
mBrand.operate(); mBrand = new MBrand(mailList);
mBrand.operate();
}
}
运行结果如下
玩游戏
看通讯录
玩游戏
看通讯录
比较好理解,不过笔者认为我们在实际开发中,可能很多地方会用到桥接模式,只是大家都忘记这个模式,而用继承去实现。
还是那句老话,理解其核心思想,拒绝生搬硬套。希望能帮助学习桥接模式的小伙伴。
java 之 桥接模式(大话设计模式)的更多相关文章
- java 之 适配器模式(大话设计模式)
适配器模式,笔者不是很推荐在项目初期阶段使用,在笔者看来这个设计模式就是套接了一层,从而达到能够迎合现有的外部接口规范. 先来简单的看下类图: 大话设计模式-类图 这个模式理解起来非常简单,A→B因为 ...
- java 之 单例模式(大话设计模式)
笔者记得去面试时曾被问起这个模式,当时还没有看过设计模式,对设计模式基本上一无所知,不过可以肯定的是笔者用过单例模式.当时回答的风马牛不相及,很尴尬. 也是从那时起,开始学习设计模式.今天所说的就是单 ...
- Bridge桥接模式(设计模式11)
在没有使用桥接模式: 扩展新问题(类归属膨胀问题) 1增加性的电脑类型,要增加每个品牌下面的类 2如果要增加一个新的电脑品牌,要增加美中电脑类型的类 违背单一职责原则: · 一个类:联想笔记本,有两个 ...
- (转)JAVA之桥接模式
原文地址:http://blog.sina.com.cn/s/blog_4080505a0101dzib.html 桥模式:将某个问题抽象的不同形式分别与该问题的具体实现部分相分离,使他们都可以独立变 ...
- java的桥接模式
http://blog.csdn.net/jason0539/article/details/22568865 http://www.cnblogs.com/V1haoge/p/6497919.htm ...
- java 之 代理模式(大话设计模式)
java代理模式顾名思义,就类似于大学,我想和冰可乐,可是我又在玩游戏,于是我让我的室友帮我把可乐带回来,简单的来说我的室友就是代理,而买可乐就是需要做的行为.这是笔者理解的代理模式 大话设计模式-类 ...
- Java 设计模式系列(七)桥接模式
Java 设计模式系列(七)桥接模式 桥接模式(Bridge)是一种结构型设计模式.Bridge 模式基于类的最小设计原则,通过使用封装.聚合及继承等行为让不同的类承担不同的职责.它的主要特点是把抽象 ...
- Java设计模式13:常用设计模式之桥接模式(结构型模式)
1. Java之桥接模式(Bridge Pattern) (1)概述: 首先我们说一个生活中的例子: 就拿汽车在路上行驶的来说.即有小汽车又有公共汽车,它们都不但能在市区中的公路上行驶,也 ...
- C++设计模式-Bridge桥接模式
作用:将抽象部份与它的实现部份分离,使它们都可以独立地变化. 将抽象(Abstraction)与实现(Implementation)分离,使得二者可以独立地变化. 桥接模式号称设计模式中最难理解的模式 ...
随机推荐
- Go Deeper
Go Deeper Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Sub ...
- day2--命令总结
1.mkdir 创建目录 -p递归(用来创建层级目录,底层目录不存在) 2.touch 创建文件 3.ls ...
- .Net Core2.0秒杀CMS部署到Centos7.3遇到的坑,酸爽呀
一.Centos7.3的安装 打开VirtualBox,点击新建,如下图所示: 点击“下一步”,弹出下面的对话框,调整内存大小,建议设置为2G,这样操作更流畅点 设置好,点击“OK”,再点击“启动”, ...
- 页面第一次加载,JS没有效果,刷新一下就好了
问题详述:页面跳转的时候,第一个第二个页面都没有问题,跳到第三个页面,JS脚本没有起作用,刷新一下就好了. 1.猜测:第一个页面和第二个页面的JS,会对第三个页面产生影响,(因为之前没有这个问题,只改 ...
- C#获取存储过程的 Return返回值和Output输出参数值
1.获取Return返回值 程序代码 //存储过程//Create PROCEDURE MYSQL// @a int,// @b int//AS// return @a + ...
- C#参考之sealed密封类(转)
C# 语言参考 sealed(C# 参考) 当对一个类应用 sealed 修饰符时,此修饰符会阻止其他类从该类继承.在下面的示例中,类 B 从类 A 继承,但是任何类都不能从类 B 继承. 1 ...
- window下安装Apache+PHP
本地系统为windows 10,Apache选择httpd-2.4.25-x64-vc14-r1,PHP选择php7.1_x64线程安全版. 1.安装Apache 将apache解压到c:/serve ...
- 我的第一个python web开发框架(17)——产品管理
这是后台管理系统最后一个功能,产品管理,它的接口与页面功能与上一章差不多. 获取产品列表接口 @get('/api/product/') def callback(): ""&qu ...
- CM5(5.11.0)和CDH5(5.11.0)离线安装
概述 文件下载 系统环境搭建 日志查看 Q&A 参考 概述 CDH (Cloudera's Distribution, including Apache Hadoop),是Hadoop众多分支 ...
- [flask实践] 解决mysql数据库不支持中文的问题
接上一篇文章,在解决了mysql+flask环境配置问题之后,往数据库存中文字符串会报1366错误,提示不正确的字符.继而发现默认的mysql采用了Latin1字符集,这种编码是不支持中文的. 如果想 ...