`
huqi
  • 浏览: 93683 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

23种经典设计模式的java实现_3_桥接模式

阅读更多

桥接模式的适用:

你不希望在抽象和它的实现部分之间有一个固定的绑定关系。例如:程序的实现部分在运行时需要被选择或者切换。

类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。这时Bridge模式使你可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充。

对一个抽象实现的修改需要对客户不产生影响,即客户的代码不必重新编译。

有许多类要生成。这种情况下你必须将一个对象分解成两个部分。这种类层次结构为“嵌套的普化”。

你想在多个对象间共享实现(可能使用引用计数),但同时要求客户并不知道这一点。

示例说明:

接口IText定义了字体的最终展现,但其的具体实现TextImpLinux和TextImpMac并不用作对外使用(即向客户暴露)。

那么,我们使用抽象类AbstractText对IText的具体实现进行“桥接”,即在这两个真实的实现和最终对外使用的字体类TextBold和TextItalic之间建造了一座桥梁,这座桥梁是通过TextBold和TextItalic继承抽象类AbstractText实现的。

最终,结果就是,字体具有了新的特性Bold和Italic但又不失自己的基本属性Linux和Mac。

这就是我们想要的。

字体接口及其两个基本实现——具有Linux风格或Mac风格的字体:

package com.alex.designpattern.bridge;

/** *//**
 * 
@author <a href="mailto:huqiyes@gmail.com">huqi</a>
 * 
@serialData 2007
 
*/

public interface IText ...{
    
public void DrawTextImp();
}


package com.alex.designpattern.bridge;

/** *//**
 * The ConcreteImplementor
 
*/

public class TextImpLinux implements IText ...{
    
public void DrawTextImp() ...{
        System.out.println(
"The text has a Linux style.");
    }

}


package com.alex.designpattern.bridge;

/** *//**
 * The ConcreteImplementor
 
*/

public class TextImpMac implements IText ...{
    
public void DrawTextImp() ...{
        System.out.println(
"The text has a Mac style.");
    }

}

 这个抽象类可以看作是一个桥梁,它被用来“桥接”字体的基本实现与字体的附加特性,使字体的属性得到无绑定的扩充:

package com.alex.designpattern.bridge;

/** *//**
 * The Abstract of Text<br>
 * Set the Text's System Style
 * <p>
 * This abstract class is a bridge,<br>
 * it can bridge "System Style" to real implemention "Text Style" of IText.
 * 
 * 
@author <a href="mailto:huqiyes@gmail.com">huqi</a>
 * 
@serialData 2007
 
*/

public abstract class AbstractText ...{
    
public abstract void DrawText(String text);

    
protected IText GetTextImp(String type) ...{
        
if (type.equals("Mac")) ...{
            
return new TextImpMac();
        }
 else if (type.equals("Linux")) ...{
            
return new TextImpLinux();
        }
 else ...{
            
return new TextImpMac();
        }

    }

}

那么,以下就是字体的附加特性——粗体和斜体,它们通过实现抽象类AbstractText来与基本属性的实现结合:

package com.alex.designpattern.bridge;

/** *//**
 * The RefinedAbstraction
 * 
 * 
@author <a href="mailto:huqiyes@gmail.com">huqi</a>
 * 
@serialData 2007
 
*/

public class TextBold extends AbstractText ...{
    
private IText imp;

    
public TextBold(String type) ...{
        imp 
= GetTextImp(type);
    }


    
public void DrawText(String text) ...{
        System.out.println(text);
        System.out.println(
"The text is bold text.");
        imp.DrawTextImp();
    }

}


package com.alex.designpattern.bridge;

/** *//**
 * The RefinedAbstraction
 * 
 * 
@author <a href="mailto:huqiyes@gmail.com">huqi</a>
 * 
@serialData 2007
 
*/

public class TextItalic extends AbstractText ...{
    
private IText imp;

    
public TextItalic(String type) ...{
        imp 
= GetTextImp(type);
    }


    
public void DrawText(String text) ...{
        System.out.println(text);
        System.out.println(
"The text is italic text.");
        imp.DrawTextImp();
    }

}

最后,当然是测试启动类啦,通过可以测试我们对这个模式的实现:

package com.alex.designpattern.bridge;

/** *//**
 * 桥接模式
 * <p>
 * 将抽象部分与它的实现部分分离,使它们都可以独立地变化。
 * 
 * 
@author <a href="mailto:huqiyes@gmail.com">huqi</a>
 * 
@serialData 2007
 
*/

public class Test ...{

    
public static void main(String[] args) ...{
        AbstractText myText 
= new TextBold("Mac");
        myText.DrawText(
"=== A test String ===");

        System.out.println(
"------------------------------------------");

        myText 
= new TextBold("Linux");
        myText.DrawText(
"=== A test String ===");

        System.out.println(
"------------------------------------------");

        myText 
= new TextItalic("Mac");
        myText.DrawText(
"=== A test String ===");

        System.out.println(
"------------------------------------------");

        myText 
= new TextItalic("Linux");
        myText.DrawText(
"=== A test String ===");
    }

}

你还等什么呢?复制下来运行它试试看吧——如果你还对“桥接”模式不了解的话。



分享到:
评论

相关推荐

    设计模式之桥接模式

    设计模式 java 桥接模式

    java设计模式-桥接模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...

    java常用23中设计模式

    结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、...

    桥接模式java示例代码

    桥接模式java示例代码,来自刘伟老师《设计模式》

    23种设计模式_Java实现

    java的设计模式大体上分为三大类: 创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。 结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享...

    java 23种设计模式.zip

    设计模式主要分为三大类: 1.创建型模式:工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式。 2.结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。 4.行为型模式:...

    设计模式 - 桥接模式

    设计模式 - 桥接模式

    用Java实现23种设计模式

    用Java实现23种设计模式 1. 创建型模式 工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern)...

    java23种设计模式

    java23种设计模式,每一种模式都有详细的讲解,很全面,如果你想深入了解一下java23种设计模式,这会非常适合你的哦!上传乃为百度云连接,失效请留言。 内容: 001策略模式! N. B8 ~' D! f9 j+ g0 I 002观察者模式 ...

    java常用设计模式-桥接模式

    java常用设计模式-桥接模式

    桥接模式和策略模式的区别,内含可运行代码和两者详细区别

    所有模式都可分为类模式和对象模式两种,类模式是继承,对象模式是委托,而桥接模式和策略模式都是将任务委托给另外一个接口去实现,那么两者的区别什么呢?

    【资源免费下载】Java代码积累丨大话设计模式(Java实现版本)、线程协作

    Java代码积累:并发 设计模式 数据结构 使用容器 实用 类 基础知识 并发性 演示线程的生命周期 生产者-消费者 设计模式参考《大话设计模式》 工厂简单模式 创造型模式 工厂方法模式 抽象工厂模式 原型模式 建造者...

    Java23种设计模式可直接运行Demo

    结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、...

    23种设计模式的java实现

    23种设计模式的java实现。创建型 抽象工厂模式 http://www.cnblogs.com/java-my-life/archive/2012/03/28/2418836.html 工厂方法 http://www.cnblogs.com/java-my-life/archive/2012/03/25/2416227.html 建造者模式 ...

    基于Java实现的23种设计模式Demo,抽象工厂模式、建造模式、工厂方法模式、原型模式、单例模式、外观模式、适配器模式等

    基于Java实现的23种设计模式Demo,抽象工厂模式、建造模式、工厂方法模式、原型模式、单例模式、外观模式、适配器模式等 Java设计模式共有23种,分别为:抽象工厂模式、建造模式、工厂方法模式、原型模式、单例模式...

    JAVA-设计模式-结构型模式-桥接模式

    JAVA-设计模式-结构型模式-桥接模式

    计算机后端-Java-图解java设计模式068 桥接模式(3).avi

    计算机后端-Java-图解java设计模式068 桥接模式(3).avi

    23种设计模式java源码

    结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、...

    java设计模式【之】桥接模式【源码】【场景:老师上课】

    java设计模式【之】桥接模式【源码】【场景:老师上课】 * 桥接模式 * 将抽象与实现分离,通过组合抽象进行交互 * (由指定人员制定接口规则,由其他人员实现接口规则) * * 桥接:描述的是关联关系,实现上...

    设计模式11桥接模式

    设计模式,桥接模式,java实现,简单的例子,具体的分析,详细的讲解

Global site tag (gtag.js) - Google Analytics