Bridge 桥梁模式 桥接模式
简介
将【抽象部分】(Abstraction,人)与【实现部分】(Implementor,人穿的衣服)分离,使它们都可以独立的变化。【业务抽象角色】引用【业务实现角色】,或者说【业务抽象角色】的部分实现是由【业务实现角色】完成的Bridge模式基于【类的最小设计原则】,通过使用封装,聚合以及继承等行为来【让不同的类承担不同的责任】。它的主要特点是把【抽象】与【行为实现】分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展。可以这么理解,【抽象】是一个事物的本身的特征,【行为】是一个事物可以做的动作,特征是相对独享的,行为是可以共享的。作用:解耦。适用性1、你不希望在抽象和它的实现部分之间有一个固定的绑定关系。例如这种情况可能是因为,在程序运行时刻,实现部分应可以选择或者切换。2、类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。这时Bridge模式使你可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充。3、对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译。4、想在多个对象间共享实现(可能使用引用计数),但同时要求客户并不知道这一点。作用:将抽象部分与其实现部分分离,使它们都可以独立地变化JDK中体现:java.util.logging中的Handler和FormatterAWT (It provides an abstraction layer which maps onto the native OS the windowing support.)JDBC
演示
抽象部分,Abstraction,业务抽象角色(人)是一个事物的本身的特征,public abstract class Person {public Clothing clothing;public String type;public abstract void dress();}class Man extends Person {public Man() {this.type = "男人";}@Overridepublic void dress() {if (clothing != null) clothing.personDressCloth(this);}}class Lady extends Person {public Lady() {this.type = "女人";}@Overridepublic void dress() {if (clothing != null) clothing.personDressCloth(this);}}实现部分,Implementor,业务实现角色(穿衣服)是一个事物(人)可以做的动作,在程序运行时刻,实现部分可以选择或者切换public abstract class Clothing {public abstract void personDressCloth(Person person);//人穿衣服}class Trouser extends Clothing {@Overridepublic void personDressCloth(Person person) {if (person != null) System.out.println(person.type + "穿裤子");}}class Jacket extends Clothing {@Overridepublic void personDressCloth(Person person) {if (person != null) System.out.println(person.type + "穿马甲");}}public class Test {public static void main(String[] args) {Person man = new Man();Person lady = new Lady();Clothing jacket = new Jacket();Clothing trouser = new Trouser();jacket.personDressCloth(man);trouser.personDressCloth(man);System.out.println("\n");jacket.personDressCloth(lady);trouser.personDressCloth(lady);}}
附件列表
Bridge 桥梁模式 桥接模式的更多相关文章
- java设计模式--结构型模式--桥接模式
桥接模式 概述 将抽象部分与它的实现部分分离,使它们都可以独立地变化. 适用性 1.你不希望在抽象和它的实现部分之间有一个固定的绑定关系. 例如这种情况可能是因为,在程序运行时刻实现部分应可以被选择或 ...
- 提高C++编译速度-------pimpl 模式& 桥接模式(转)
pimpl 模式(Private Implementation),我们常常听到诸如“不要改动你的公有接口”这样的建议,所以我们一般都会修改私有接口,但是这会导致包含该头文件的所有源文件都要重新编译,这 ...
- [19/04/26-星期五] GOF23_结构型模式(桥接模式、组合模式)
一.桥接模式(bridge) 场景:商城系统中常见的商品分类,以电脑为例,首先想到使用多层继承结构. —— 台式机(联想台式机.戴尔台式机.神舟台式机) 电脑 ——笔记本(联想笔记本.戴尔笔记本 ...
- VMware网络连接模式——桥接模式、NAT模式以及仅主机模式的介绍和区别
在使用VMware Workstation(以下简称:VMware)创建虚拟机的过程中,配置虚拟机的网络连接是非常重要的一环,当我们为虚拟机配置网络连接时,我们可以看到如下图所示的几种网络连接模式:桥 ...
- vmware三种网络模式:桥接模式|仅主机|NAT模式
VMware 网络模式 1. Bridged(桥接)桥接模式下,宿主机物理网卡(主机网卡)和虚拟网卡通过 VMnet0 虚拟交换机进行桥接,物理网卡和虚拟网卡在拓扑图上处于同等地位,物理网卡和虚拟网卡 ...
- Vmare虚拟机网络连接方式桥接模式+桥接模式+主机模式
虚拟机网络连接模式 最近在学习虚拟机和计算机网络,在网上看了一些关于虚拟机网络连接方式的介绍 这篇文章写的不错:https://www.cnblogs.com/luxiaodai/p/9947343. ...
- 【编程思想】【设计模式】【结构模式Structural】桥梁模式/桥接模式bridge
Python版 https://github.com/faif/python-patterns/blob/master/structural/bridge.py #!/usr/bin/env pyth ...
- 桥接模式 桥梁模式 bridge 结构型 设计模式(十二)
桥接模式Bridge Bridge 意为桥梁,桥接模式的作用就像桥梁一样,用于把两件事物连接起来 意图 将抽象部分与他的实现部分进行分离,使得他们都可以独立的发展. 意图解析 依赖倒置原 ...
- 【设计模式】结构型04桥接模式(Bridge Pattern)
学习地址:http://www.runoob.com/design-pattern/bridge-pattern.html 桥接模式(Bridge Pattern) 桥接模式(Bridge patte ...
随机推荐
- 关于android:configChanges的属性
一般在AndroidManifest.xml文件中都没有使用到android:configChanges="keyboardHidden|orientation"配置,当然还是很有 ...
- Python自动化运维之29、Bottle框架
Bottle 官网:http://bottlepy.org/docs/dev/index.html Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除 ...
- 使用Python操作Redis
1. 安装pyredis 首先安装pip 1 2 3 4 5 6 7 8 <SHELL># apt-get install python-pip ...... <SHELL> ...
- Solr4.8.0源码分析(25)之SolrCloud的Split流程
Solr4.8.0源码分析(25)之SolrCloud的Split流程(一) 题记:昨天有位网友问我SolrCloud的split的机制是如何的,这个还真不知道,所以今天抽空去看了Split的原理,大 ...
- Unity NGUI 3.0.4版本 制作网络版斗地主
Unity NGUI 3.0.4版本 @by 灰太龙 开发环境 Win7旗舰版 Unity 4.2.1f4 本文就写个开门篇,告诉大家怎么用NGUI,第一步导入NGUI 3.0.4版本! 1.启动U ...
- Catch That Cow
poj3278:http://poj.org/problem?id=3278 题意:给你一个n和k,n可以加1也可以减1,还可以乘2,现在要求n经过这样的几步变换可以使得n==k:求得最小的步数.题解 ...
- Ubiquitous Religions(并查集)
Description There are so many different religions in the world today that it is difficult to keep tr ...
- c# 集合ArrayList;特殊集合Stack、Queue
一) ArrayList 1.foreach遍历数组中各个元素,执行内部语句 2. 3. 4. myarry.Clear();//将集合清空 bool b = myarry.Contains(3 ...
- ASP.NET服务器推送及前后台实时交互
一:项目需求 页面需要做一个上传Excel功能,并处理Excel中的数据到数据库中 这是一个较为漫长的过程 这时我需要在页面上显示处理进度的提示,给用户一个良好的体验 比如给用户提示“正在上传文档”, ...
- bzoj2783
由于路径的深度是升序的所以我们可以考虑用前缀和的思想,用sum维护点到根路径上节点和对于每个点x存在路径和为s即这个点到根的路径上存在y,使sum[x]-sum[y]=s这显然是可以二分的 type ...