桥接模式
概述
将抽象部分与它的实现部分分离,使它们都可以独立地变化。 适用性
1.你不希望在抽象和它的实现部分之间有一个固定的绑定关系。
例如这种情况可能是因为,在程序运行时刻实现部分应可以被选择或者切换。 2.类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。
这时Bridge模式使你可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充。 3.对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译。 4.正如在意图一节的第一个类图中所示的那样,有许多类要生成。
这样一种类层次结构说明你必须将一个对象分解成两个部分。 5.你想在多个对象间共享实现(可能使用引用计数),但同时要求客户并不知道这一点。 参与者
1.Abstraction
定义抽象类的接口。
维护一个指向Implementor类型对象的指针。 2.RefinedAbstraction
扩充由Abstraction定义的接口。 3.Implementor
定义实现类的接口,该接口不一定要与Abstraction的接口完全一致。
事实上这两个接口可以完全不同。
一般来讲,Implementor接口仅提供基本操作,而Abstraction则定义了基于这些基本操作的较高层次的操作。 4.ConcreteImplementor
实现Implementor接口并定义它的具体实现。

测试类:

 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); jacket.personDressCloth(lady);
trouser.personDressCloth(lady);
}
}
 public abstract class Person {

     private Clothing clothing;

     private String type;

     public Clothing getClothing() {
return clothing;
} public void setClothing() {
this.clothing = ClothingFactory.getClothing();
} public void setType(String type) {
this.type = type;
} public String getType() {
return this.type;
} public abstract void dress();
}
 public abstract class Clothing {

     public abstract void personDressCloth(Person person);
}
 public class Lady extends Person {

     public Lady() {
setType("女人");
} public void dress() {
Clothing clothing = getClothing();
clothing.personDressCloth(this);
}
}
 public abstract class Clothing {

     public abstract void personDressCloth(Person person);
}
 public class Jacket extends Clothing {

     public void personDressCloth(Person person) {
System.out.println(person.getType() + "穿马甲");
}
}
 @SuppressWarnings("static-access")
public class ClothingFactory {
private static Clothing clothing; public ClothingFactory(Clothing clothing){
this.clothing = clothing;
} public static Clothing getClothing() {
return clothing;
} }
 public class Trouser extends Clothing {

     public void personDressCloth(Person person) {
System.out.println(person.getType() + "穿裤子");
}
}

java设计模式--结构型模式--桥接模式的更多相关文章

  1. Java设计模式——结构型模式

    Java设计模式中共有7种结构型模式:适配器模式.装饰模式.代理模式.外观模式.桥接模式.组合模式.享元模式.其中对象的适配器模式是各种模式的起源,其关系如下面的图:1.适配器模式 适配器模式将某个类 ...

  2. java设计模式结构型模式

    结构型模式: – 核心作用:是从程序的结构上实现松耦合,从而可以扩大整体的类结 构,用来解决更大的问题 分类: • 适配器模式.代理模式.桥接模式. 装饰模式.组合模式.外观模式.享元模式 结构型模式 ...

  3. 【设计模式】结构型04桥接模式(Bridge Pattern)

    学习地址:http://www.runoob.com/design-pattern/bridge-pattern.html 桥接模式(Bridge Pattern) 桥接模式(Bridge patte ...

  4. Java设计模式之四 ----- 适配器模式和桥接模式

    前言 在上一篇中我们学习了创建型模式的建造者模式和原型模式.本篇则来学习下结构型模式的适配器模式和桥接模式. 适配器模式 简介 适配器模式是作为两个不兼容的接口之间的桥梁.这种类型的设计模式属于结构型 ...

  5. python设计模式---结构型之代理模式

    主要想着nginx:) from abc import ABCMeta, abstractmethod # 结构型设计模式---代理模式 class Actor: def __init__(self) ...

  6. Java设计模式菜鸟系列(十七)桥接模式建模与实现

    转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40008711 桥接模式(Bridge): 把事物和其详细实现分开(抽象化与实现化解耦),使 ...

  7. java设计模式--结构型模式--享元模式

    享元模式 概述 运用共享技术有效地支持大量细粒度的对象. 适用性 当都具备下列情况时,使用Flyweight模式: 1.一个应用程序使用了大量的对象. 2.完全由于使用大量的对象,造成很大的存储开销. ...

  8. java设计模式--结构型模式--组合模式

    什么是组合模式,这个有待研究,个人觉得是各类组合而形成的一种结构吧. 组合模式: 组合模式 概述 将对象组合成树形结构以表示"部分-整体"的层次结构."Composite ...

  9. java设计模式--结构型模式--外观模式

    外观模式 概述 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 适用性 1.当你要为一个复杂子系统提供一个简单接口时.子系统往往因为不 ...

随机推荐

  1. 【转】 ubuntu12.04更新源 官网和163等

    原文网址:http://blog.csdn.net/zhangliang_571/article/details/8813999 分类: LINUX 摘要: 本文列出ubuntu 12.04 LTS更 ...

  2. bzoj 1194

    http://www.lydsy.com/JudgeOnline/problem.php?id=1194 我们看看怎么判断B是否是A的升级. 我们新建一个图G,每个点为一个二元组(i,j),表示A的i ...

  3. (转)iOS Wow体验 - 第四章 - 为应用的上下文环境而设计

    本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第四章译文精选,其余章节将陆续放出.上一篇:Wow ...

  4. cocos2d移植到安卓引入第三方so文件时候编译会删除解决方式

    在游戏中对接支付的SDK的时候引入支付的so文件的时候在编译的时候总是被删除,后来经过查找资料自己整理出了一个解决方式 方案例如以下 在项目导入安卓中之后.在相应的jni目录中创建一个prebuilt ...

  5. asp.net页面之间的跳转

    调用Request.CurrentExecutionFilePath方法返回到当前页面 站点中常常要跳转页面,调用Request.CurrentExecutionFilePath方法能够获取当前页面的 ...

  6. poj 2388 Who&#39;s in the Middle

    Who's in the Middle Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 31149   Accepted: 1 ...

  7. [ES6] ITERATORS

    Iterables return an iterator object. This object knows how to access items from a collection 1 at a ...

  8. 工程与科学数值方法的Matlab实现

    %stats.m function [mean,stdev]=stats(x) n=length(x);mean=sum(x)/n;stdev=sqrt(sum((x-mean).^2/(n-1))) ...

  9. C# 扩展方法克隆实体类

    using System; using System.IO; using System.Runtime.Serialization.Formatters.Binary; using System.Ru ...

  10. w530 在ubuntu 12.04 _x64 背光调节方法

    So to get the screen brightness keys working with your Nvidia graphics card, create a file in the xo ...