二十三种设计模式之结构型模式之桥接模式

来源:互联网 发布:禁止 域名 ip 编辑:程序博客网 时间:2024/05/23 21:04

桥接模式

概述


将抽象部分与它的实现部分分离,使它们都可以独立地变化。

适用性


1.你不希望在抽象和它的实现部分之间有一个固定的绑定关系。  例如这种情况可能是因为,在程序运行时刻实现部分应可以被选择或者切换。2.类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。  这时Bridge模式使你可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充。3.对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译。4.正如在意图一节的第一个类图中所示的那样,有许多类要生成。  这样一种类层次结构说明你必须将一个对象分解成两个部分。5.你想在多个对象间共享实现(可能使用引用计数),但同时要求客户并不知道这一点。

参与者


1.Abstraction  定义抽象类的接口。  维护一个指向Implementor类型对象的指针。2.RefinedAbstraction  扩充由Abstraction定义的接口。3.Implementor  定义实现类的接口,该接口不一定要与Abstraction的接口完全一致。  事实上这两个接口可以完全不同。  一般来讲,Implementor接口仅提供基本操作,而Abstraction则定义了基于这些基本操作的较高层次的操作。4.ConcreteImplementor  实现Implementor接口并定义它的具体实现。

类图


这里写图片描述

例子


Abstraction

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();}

RefinedAbstraction

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

Implementor

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

ConcreteImplementor

public class Jacket extends Clothing {    public void personDressCloth(Person person) {        System.out.println(person.getType() + "穿马甲");    }}public class Trouser extends Clothing {    public void personDressCloth(Person person) {        System.out.println(person.getType() + "穿裤子");    }}

Test

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);    }}

result

男人穿马甲男人穿裤子女人穿马甲女人穿裤子

Copyright © 2008 Angus Young
疯狂Java联盟:http://www.crazyit.org

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苹果5s手机闪退怎么办 手机qq总是闪退怎么办 qq邮箱密码忘了怎么办 qq加不了群怎么办视频 孩子好几天不大便怎么办 宝宝7天没有大便怎么办 40天小孩不拉屎怎么办 40多天婴儿便秘怎么办 小孩拉绿色稀便怎么办 5岁好几天不拉屎怎么办 2个月宝宝不大便怎么办 两月宝宝不拉屎怎么办 好几天没大便了怎么办 初生婴儿便秘解不出大便怎么办 小孩大便拉不出来怎么办 新生儿3天没大便怎么办 新生儿5天没大便怎么办 小孩好几天不大便怎么办 婴儿10天不拉屎怎么办 3岁大便拉不出来怎么办 孩子大便拉不出来怎么办 4岁大便拉不出来怎么办 排位队友太坑怎么办 lol遇到坑b队友怎么办 被冷暴力分手后怎么办 孕早期半夜饿了怎么办 怀孕了月经还来怎么办 大米生虫子吃了怎么办 老公有外遇不回家怎么办 老公和小三有了孩子怎么办 祖坟给人挖了怎么办 妯娌关系和不来怎么办 婆婆老说我不好怎么办 婆婆对我妈不好怎么办 老公嫌老婆胸小怎么办 牙上颚的肉肿了怎么办 乐视手机音量小怎么办 手表日期调过了怎么办 机械表日期不走怎么办 差银行钱还不起怎么办 有人威胁要杀我怎么办