[设计模式-结构型]桥接(Bridge )
概括
名称 |
Bridge |
结构 |
|
动机 |
将抽象部分与它的实现部分分离,使它们都可以独立地变化。 |
适用性 |
|
解析
形象比喻:
BRIDGE—早上碰到MM,要说早上好,晚上碰到MM,要说晚上好;碰到MM穿了件新衣服,要说你的衣服好漂亮哦,碰到MM新做的发型,要说你的头发好漂亮哦。不要问我“早上碰到MM新做了个发型怎么说”这种问题,自己用BRIDGE组合一下不就行了
桥梁模式:将抽象化与实现化脱耦,使得二者可以独立的变化,也就是说将他们之间的强关联变成弱关联,也就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系,从而使两者可以独立的变化。
1.Abstraction
定义抽象类的接口。
维护一个指向Implementor类型对象的指针。
2.RefinedAbstraction
扩充由Abstraction定义的接口。
3.Implementor
定义实现类的接口,该接口不一定要与Abstraction的接口完全一致。
事实上这两个接口可以完全不同。
一般来讲,Implementor接口仅提供基本操作,而Abstraction则定义了基于这些基本操作的较高层次的操作。
4.ConcreteImplementor
实现Implementor接口并定义它的具体实现。
实例
这里的例子是有 软件产品和硬件产品两类产品,与金属包装和塑料包装两类包装。
使用桥接模式将产品类和包装类结合起来,就可以使用四种状况了:
软件金属包装
软件塑料包装
硬件金属包装
硬件塑料包装
涉及的文件有:
Product.java
-- SoftwareProduct.java
-- HardwareProduct.java
Package.java
-- MetalPackage.java
-- PlasticPackage.java
TestMain.java
/** * @author oscar999 * @date 2013-7-24* @version V1.0 */
package designptn.bridge;public abstract class Product {private String type;/*** @return the type*/public String getType() {return type;}/*** @param type* the type to set*/public void setType(String type) {this.type = type;}
}
/** * @author oscar999 * @date 2013-7-24* @version V1.0 */
package designptn.bridge;public class SoftwareProduct extends Product {public SoftwareProduct() {setType("Software");}public void pack(Package package0){package0.packProduct(this);}
}
/** * @author oscar999 * @date 2013-7-24* @version V1.0 */
package designptn.bridge;public class HardwareProduct extends Product {public HardwareProduct() {setType("Hardware");}public void pack(Package package0) {package0.packProduct(this);}
}
/** * @author oscar999 * @date 2013-7-24* @version V1.0 */
package designptn.bridge;public abstract class Package {public abstract void packProduct(Product product);
}
/** * @author oscar999 * @date 2013-7-24* @version V1.0 */
package designptn.bridge;public class MetalPackage extends Package {/** (non-Javadoc)* * @see designptn.bridge.Package#packProduct(designptn.bridge.Product)*/@Overridepublic void packProduct(Product product) {// TODO Auto-generated method stubSystem.out.println(product.getType() + " pack Metal Package");}}
/** * @author oscar999 * @date 2013-7-24* @version V1.0 */
package designptn.bridge;public class PlasticPackage extends Package {/** (non-Javadoc)* * @see designptn.bridge.Package#packProduct(designptn.bridge.Product)*/@Overridepublic void packProduct(Product product) {// TODO Auto-generated method stubSystem.out.println(product.getType() + " pack Plastic Package");}}
/** * @author oscar999 * @date 2013-7-24* @version V1.0 */
package designptn.bridge;public class TestMain {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubProduct sProduct = new SoftwareProduct();Product hProduct = new HardwareProduct();Package mPackage = new MetalPackage();Package pPackage = new PlasticPackage();mPackage.packProduct(sProduct);pPackage.packProduct(sProduct);mPackage.packProduct(hProduct);pPackage.packProduct(hProduct);}}
[设计模式-结构型]桥接(Bridge )相关推荐
- 设计模式-结构型模式 -bridge 桥接模式
桥接模式更注重:两个可变维度的拓展 不能用继承 容易造成类爆炸 四个角色:实现化 (定义接口方法 ) 具体实现化 implement实现化接口 并重写方法 抽象化 :聚合实现化接口 并初始化 重写方法 ...
- 设计模式-结构型-桥接
#pragma once#ifndef BRIDEG_H #define BRIDEG_H class Implementor; // 维护一个Implementor 类的指针 class Abstr ...
- 设计模式(16):结构型-桥接模式(Bridge)
设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...
- 23种设计模式——结构型设计模式(7种)
目录 ☞ 23 种设计模式--创建型设计模式(5种) ☞ 23 种设计模式--结构型设计模式(7种) ☞ 23 种设计模式--行为型设计模式(11种) 3. 结构型设计模式 结构型模式描述如何将类或对 ...
- 设计模式-结构型模式篇
设计模式 目录: 一.代理模式 二.适配器模式 三.装饰者模式 四.桥接模式 五.外观模式 六.组合模式 七.享元模式 注:学习视频:黑马程序员Java设计模式 结构型模式 结构性模式描述如何将类或对 ...
- 设计模式 - 结构型
结构型设计模式 结构型模式(Structural Pattern)关注类和对象的组合.其描述如何将类或者对象结合在一起形成更大的结构,就像搭积木,可以通过简单积木的组合形成复杂的.功能更为强大的结构. ...
- 设计模式-结构型模式-装饰模式
设计模式-结构型模式-装饰模式 栗子 以成绩单需要家长签字为要求. 成绩单类图 // 抽象成绩单 public abstract class SchoolReport{// 成绩单你的成绩情况publ ...
- 设计模式学习笔记——桥接(Bridge)模式
设计模式学习笔记--桥接(Bridge)模式 @(设计模式)[设计模式, 桥接模式, bridge] 设计模式学习笔记桥接Bridge模式 基本介绍 类的功能层次结构 类的实现层次结构 使用桥接模式的 ...
- 设计模式(结构型)之享元模式(Flyweight Pattern)
PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbob ...
最新文章
- oracle三种分区的方式,Oracle 分区表 总结大全(3)
- hadoop2.2.0安装,完全分布式安装
- SAP 预算控制业务集成
- 内存泄漏以及常见的解决方法
- 使用jsonEditor打造一个复杂json编辑器
- X Window Messing With The Mouse Cursor
- IBM的漂浮机器人,被马斯克的火箭送去太空了
- @EnableConfigurationProperties
- Warez 3D动画,超牛
- 华为发布鸿蒙Beta版公测,华为发布鸿蒙OS 2.0手机开发者Beta版:P40、Mate 30系列可申请公测...
- oracle 数据库 有坏快,ORACLE数据库坏块的处理 (处理无对象坏快的方法)
- 屏蔽搜狗输入法快捷键
- 关于工业4.0和智能制造的总结以及背后的思考
- 使用mysql语句进行多表联查(以三个表为例)
- Codefoeces 581B Luxurious Houses
- 经典古诗词名句 mysql,中国古代经典古诗词名句
- 如何正确卸载Oracle避免卸载Oracle不干净解决一
- Python二叉树详解笔记
- 华为2288H v5服务器配置JBOD(硬盘直通)
- pandorabox开启ssr_华硕及PandoraBox固件如何启用SSH和SFTP连接