设计模式(十一) : 结构型模式--桥梁模式

桥梁模式的用意是:将抽象化和实现化惊醒脱耦,使得两者可以独立的变化。所谓脱耦就是将抽象化和实现化之间的耦合解脱开,也就是强关联变成若关联。

强关联就是在编译期就已经确立的,无法在运行时改变;弱关联就是可以动态的确定并且运行期可以改变的关联。继承是强关联,合成、聚合是弱关联。

类图:

示意性代码:

package com.javadesignpattern.Bridge;

public interface Implementor {

void operation();

}


package com.javadesignpattern.Bridge;

public class ConcreteImplementor1 implements Implementor {

public void operation() {
// TODO Auto-generated method stub
System.out.println(ConcreteImplementor1.class + ": operation function");
//System.out.println("Customer");
}

}


package com.javadesignpattern.Bridge;

public class ConcreteImplementor2 implements Implementor{

public void operation() {
// TODO Auto-generated method stub
System.out.println(ConcreteImplementor2.class + ": operation function");
//System.out.println("Thing");
}

}


package com.javadesignpattern.Bridge;

public abstract class Abstraction {

Implementor impl;

public Abstraction(Implementor impl){
this.impl = impl;
}

public void operation(){
impl.operation();

System.out.println(Abstraction.class + " : operation function");
}

}


package com.javadesignpattern.Bridge;

public class RedefinedAbstraction extends Abstraction {

public RedefinedAbstraction(Implementor impl) {
super(impl);
// TODO Auto-generated constructor stub
}

public void operation(){
super.operation();
System.out.println(RedefinedAbstraction.class + " : operation function");
//System.out.println("Car");
}

}


package com.javadesignpattern.Bridge;

public class Client {

public static void main(String[] args){
Abstraction abs = new RedefinedAbstraction(new ConcreteImplementor1());
abs.operation();
}

}

在网上看到一个例子解释这个的,我觉得蛮好的,mark一下:http://alaric.iteye.com/blog/1918381

《java与模式》里面,讲到的jdbc驱动器的例子。drivermanager根据url(定义响应的数据库的url)得到具体的实现。

时间: 2024-10-11 16:30:15

设计模式(十一) : 结构型模式--桥梁模式的相关文章

"围观"设计模式(15)--结构型之桥梁模式(Bridge Pattern)

桥接模式是软件设计模式中最复杂的模式之一,它把事物对象和其具体行为.具体特征分离开来,使它们可以各自独立的变化.事物对象仅是一个抽象的概念.如"圆形"."三角形"归于抽象的"形状"之下,而"画圆"."画三角"归于实现行为的"画图"类之下,然后由"形状"调用"画图".----WIKIPEDIA 个人理解 桥梁模式的核心在于解耦,通过抽象化将具体的事物

"围观"设计模式(14)--结构型之外观模式(Facade Pattern)

外观模式(Facade pattern),是软件工程中常用的一种软件设计模式,它为子系统中的一组接口提供一个统一的高层接口,使得子系统更容易使用.----WIKIPEDIA 个人理解 当一个项目中出现比较杂乱的调用关系时,类与类之间的耦合关系过于复杂,为了降低耦合度,我们可以采用一个公共的接口与其他类发生耦合,这样可以尽量大的降低外界与该系统的耦合度,同时降低了整个系统的复杂度,外观模式相当于一个公共的入口一样,为使用者敞开大门,暴漏一些必要的接口,方便外界进行调用.通俗来讲就是,有多个不同的类

"围观"设计模式(12)--结构型之代理模式(Proxy Pattern)

维基百科 代理模式(英语:Proxy Pattern)是程序设计中的一种设计模式. 所谓的代理者是指一个类可以作为其它东西的接口.代理者可以作任何东西的接口:网络连接.内存中的大对象.文件或其它昂贵或无法复制的资源.----WIKIPEDIA 个人理解 代理模式就是找另外的一个对象作为代理去为你实施请求,代理模式分为两种,一种是静态代理模式,另外一种是动态代理模式,静态代理模式是代理类为其创建一个对象,将需要代理的类的对象赋予代理类中的该对象,让代理类中该对象去代替需要代理的类的对象去执行一定的

【设计模式】-结构型-7-组合模式

主要角色 抽象构件(Component)角色:它的主要作用是为树叶构件和树枝构件声明公共接口,并实现它们的默认行为.在透明式的组合模式中抽象构件还声明访问和管理子类的接口:在安全式的组合模式中不声明访问和管理子类的接口,管理工作由树枝构件完成. 树叶构件(Leaf)角色:是组合中的叶节点对象,它没有子节点,用于实现抽象构件角色中 声明的公共接口. 树枝构件(Composite)角色:是组合中的分支节点对象,它有子节点.它实现了抽象构件角色中声明的接口,它的主要作用是存储和管理子部件,通常包含 A

【设计模式】-结构型-2-适配器模式

主要角色 目标(Target)接口:当前系统业务所期待的接口,它可以是抽象类或接口. 适配者(Adaptee)类:它是被访问和适配的现存组件库中的组件接口. 适配器(Adapter)类:它是一个转换器,通过继承或引用适配者的对象,把适配者接口转换成目标接口,让客户按目标接口的格式访问适配者. 代码展示 package adapter; //目标接口 interface Target { public void request(); } //适配者接口 class Adaptee { public

【设计模式】-结构型-5-外观模式

主要角色 外观(Facade)角色:为多个子系统对外提供一个共同的接口. 子系统(Sub System)角色:实现系统的部分功能,客户可以通过外观角色访问它. 客户(Client)角色:通过一个外观角色访问各个子系统的功能. 代码展示 package facade; public class FacadePattern { public static void main(String[] args) { Facade f=new Facade(); f.method(); } } //外观角色

"围观"设计模式(30)--结构型设计模式总结(适配器、代理、装饰、外观、桥梁、组合、享元)

设计模式代码下载地址 设计模式代码下载地址 1  适配器模式 在设计模式中,适配器模式(英语:adapter pattern)有时候也称包装样式或者包装(wrapper).将一个类的接口转接成用户所期待的.一个适配使得因接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中.----WIKIPEDIA 个人理解 适配器模式:将两个不一致或者说无法直接使用的类或者接口通过适配器模式进行兼容,使得他们可以在一块使用.适配器模式在之前的项目中我是用于处理数据的不兼容的,对

设计模式4 结构型模式

设计模式4  结构型模式 目录 代理模式 装饰器 外观模式 适配器模式 代理模式,美国,韩国代理购物 [email protected]:~$ cat main.cpp  #include<iostream> using namespace std; class Item //商品 { public: Item(string kind ,bool fact) { this->kind = kind; this->fact = fact; } string getKind() { r

Java经典23种设计模式之结构型模式(二)

接上篇,本文介绍结构型模式里的组合模式.装饰模式.外观模式. 一.组合模式(Composite) 组合模式:将对象组合成树形结构,表示"部分--整体"的层次结构.最终达到单个对象和组合对象的使用具有一致性.单看这句话貌似有点抽象,其实比较简单. 以李云龙的独立团为例,目的要统计赵嘉宇一战共歼灭敌人多少个.最高的级别是团,一个团有若干个营,一个营有若干个排,一个排有若干个战士.(为了简化问题,排下面就不设行政单位了).很自然的,李云龙给营长开会回去给老子统计.营长回去给各个排长开会,赶紧

一起学java设计模式--适配器模式(结构型模式)

适配器模式 现有一个接口DataOperation定义了排序方法sort(int[]) 和查找方法search(int[], int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法,类BinarySearch 的binarySearch(int[], int)方法实现了二分查找算法.现使用适配器模式设计一个系统,在不修改源代码的情况下将类QuickSort和类BinarySearch的方法适配到DataOperation接口中.绘制类图并编程实现. (要求实现