JAVA设计模式之【桥接模式】

简介:
桥接模式    蜡笔中颜色和型号之间存在耦合    毛笔中,颜色和型号解耦了    如果软件系统中某个类存在两个独立变化的维度,桥接模式可以将两个维度分离出来    角色        抽象类        扩充抽象类        实现类接口            提供基本操作            抽象类定义的接口会做更多更负责的操作            使用关联关系,替代继承关系        具体实现类    面向对象思想        单一职责原则        开闭原则        合成复用原则        里氏替换原则        依赖倒转原则    毛笔案例        毛笔型号维度            大毛笔            中毛笔            小毛笔        型号是毛笔的抽象部分,颜色是毛笔的实现部分        毛笔颜色维度            黑色            红色            灰色            蓝色            ...        毛笔和颜色之间是聚合关系    图片案例        Image充当抽象类        子类JPGImage,PNGImage、BMPImage和GIFImage充当扩充抽象类        ImageImp充当实现类接口        子类WindowsImp、LinuxImp、UnixImp充当具体实现类        像素辅助类,Matrix,不同操作系统提供不同的方式显示像素矩阵    桥接模式可以和适配器模式结合使用

1.图片实现类接口

package Bridge;

/**
 * Created by e550 on 2016/10/3.
 */
public interface ImageImp {
    public void doPaint(Matrix m);
}

2.图片抽象类

package Bridge;

/**
 * Created by e550 on 2016/10/3.
 */
abstract class Image {
    protected ImageImp imp;
    public void setImageImp(ImageImp imp) {
        this.imp = imp;
    }

    public abstract void parseFile(String fileName);
}

3.图片扩充抽象类

JPG

package Bridge;

/**
 * Created by e550 on 2016/10/3.
 */
public class JPGImage extends Image{
    public void parseFile(String fileName) {
        Matrix m = new Matrix();
        imp.doPaint(m);
        System.out.println(fileName + ",格式为JPG");
    }
}

PNG

package Bridge;

/**
 * Created by e550 on 2016/10/3.
 */
public class PNGImage extends Image{
    public void parseFile(String fileName) {
        Matrix m = new Matrix();
        imp.doPaint(m);
        System.out.println(fileName + ",格式为PNG。");
    }
}

GIF

package Bridge;

/**
 * Created by e550 on 2016/10/3.
 */
public class GIFImage extends Image{
    public void parseFile(String fileName) {
        Matrix m = new Matrix();
        imp.doPaint(m);
        System.out.println(fileName + ",格式为GIF。");
    }
}

BMP

package Bridge;

/**
 * Created by e550 on 2016/10/3.
 */
public class BMPImage extends Image{
    public void parseFile(String fileName) {
        Matrix m = new Matrix();
        imp.doPaint(m);
        System.out.println(fileName + ",格式为BMP。");
    }
}

4.具体实现类
Windows

package Bridge;

/**
 * Created by e550 on 2016/10/3.
 */
public class WindowsImp implements ImageImp{
    public void doPaint(Matrix m) {
        //调用Windows系统的绘制函数绘制像素矩阵
        System.out.println("在Windows操作系统中显示图像:");
    }
}

Linux

package Bridge;

/**
 * Created by e550 on 2016/10/3.
 */
public class LinuxImp implements ImageImp{
    public void doPaint(Matrix m) {
        //调用Windows系统的绘制函数绘制像素矩阵
        System.out.println("在Linux操作系统中显示图像:");
    }

}

Unix

package Bridge;

/**
 * Created by e550 on 2016/10/3.
 */
public class UnixImp implements ImageImp{
    public void doPaint(Matrix m) {
        System.out.println("在Unix操作系统中显示图像:");
    }
}

5.客户端

package Bridge;

/**
 * Created by e550 on 2016/10/3.
 */
public class Client {
    public static void main(String args[]) {
        Image image;
        ImageImp imp;
        image  = new GIFImage();
        imp    = new LinuxImp();
        image.setImageImp(imp);
        image.parseFile(" 日出美景");
    }
}

执行结果
在Linux操作系统中显示图像:
日出美景,格式为GIF。

再看一个笔的例子
1.Color接口

package Bridge.PenColor;

/**
 * Created by e550 on 2016/10/3.
 */
public interface Color {
    void bepaint(String penType,String name);
}

2.Pen抽象类

package Bridge.PenColor;

/**
 * Created by e550 on 2016/10/3.
 */
public abstract class Pen {
    protected Color color;
    public void setColor(Color color) {
        this.color = color;
    }
    public abstract void draw(String name);
}

3.Color接口实现

package Bridge.PenColor;

/**
 * Created by e550 on 2016/10/3.
 */
public class Black implements Color{
    public void bepaint(String penType,String name) {
        System.out.println(penType + "黑色的" + name + ".");
    }
}
package Bridge.PenColor;

/**
 * Created by e550 on 2016/10/3.
 */
public class Blue implements Color{
    public void bepaint(String penType,String name) {
        System.out.println(penType + "蓝色的" + name + ".");
    }
}

4.Pen抽象类实现

package Bridge.PenColor;

/**
 * Created by e550 on 2016/10/3.
 */
public class BigPen extends Pen{
    public void draw(String name) {
        String penType="大号毛笔绘制";
        this.color.bepaint(penType,name);
    }
}
package Bridge.PenColor;

/**
 * Created by e550 on 2016/10/3.
 */
public class MiddlePen extends Pen{
    public void draw(String name) {
        String penType = "中型笔绘制";
        this.color.bepaint(penType,name);
    }
}
package Bridge.PenColor;

/**
 * Created by e550 on 2016/10/3.
 */
public class SmallPen extends Pen{
    public void draw(String name) {
        String penType = "小型笔绘制";
        this.color.bepaint(penType,name);
    }
}

5.客户端

package Bridge.PenColor;

/**
 * Created by e550 on 2016/10/3.
 */
public class Client {
    public static void main(String args[]) {
        Color color;
        Pen pen;
        color = new Blue();
        pen = new BigPen();
        pen.setColor(color);
        pen.draw("鲜花");
    }
}

执行结果
大号毛笔绘制蓝色的鲜花


本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/5929512.html如需转载请自行联系原作者

相关文章
|
16天前
|
设计模式 算法 Java
Java中的设计模式:提升代码质量的秘诀
【8月更文挑战第23天】在Java开发中,设计模式是提高代码可读性、可维护性和扩展性的强有力工具。本文通过浅显易懂的语言和实际案例,探讨几种常见的设计模式及其在Java中的应用,旨在帮助开发者更好地理解并运用这些模式来优化自己的代码结构。
35 2
|
19天前
|
设计模式 存储 Java
【十】设计模式~~~结构型模式~~~享元模式(Java)
文章详细介绍了享元模式(Flyweight Pattern),这是一种对象结构型模式,通过共享技术实现大量细粒度对象的重用,区分内部状态和外部状态来减少内存中对象的数量,提高系统性能。通过围棋棋子的设计案例,展示了享元模式的动机、定义、结构、优点、缺点以及适用场景,并探讨了单纯享元模式和复合享元模式以及与其他模式的联用。
【十】设计模式~~~结构型模式~~~享元模式(Java)
|
19天前
|
设计模式 存储 Java
【九】设计模式~~~结构型模式~~~外观模式(Java)
文章详细介绍了外观模式(Facade Pattern),这是一种对象结构型模式,通过引入一个外观类来简化客户端与多个子系统之间的交互,降低系统的耦合度,并提供一个统一的高层接口来使用子系统。通过文件加密模块的实例,展示了外观模式的动机、定义、结构、优点、缺点以及适用场景,并讨论了如何通过引入抽象外观类来提高系统的可扩展性。
【九】设计模式~~~结构型模式~~~外观模式(Java)
|
19天前
|
设计模式 Java
【八】设计模式~~~结构型模式~~~装饰模式(Java)
文章详细介绍了装饰模式(Decorator Pattern),这是一种对象结构型模式,用于在不使用继承的情况下动态地给对象添加额外的职责。装饰模式通过关联机制,使用装饰器类来包装原有对象,并在运行时通过组合的方式扩展对象的行为。文章通过图形界面构件库的设计案例,展示了装饰模式的动机、定义、结构、优点、缺点以及适用场景,并提供了Java代码实现和应用示例。装饰模式提高了系统的灵活性和可扩展性,适用于需要动态、透明地扩展对象功能的情况。
【八】设计模式~~~结构型模式~~~装饰模式(Java)
|
19天前
|
设计模式 XML 存储
【七】设计模式~~~结构型模式~~~桥接模式(Java)
文章详细介绍了桥接模式(Bridge Pattern),这是一种对象结构型模式,用于将抽象部分与实现部分分离,使它们可以独立地变化。通过实际的软件开发案例,如跨平台视频播放器的设计,文章阐述了桥接模式的动机、定义、结构、优点、缺点以及适用场景,并提供了完整的代码实现和测试结果。桥接模式适用于存在两个独立变化维度的系统,可以提高系统的可扩展性和灵活性。
【七】设计模式~~~结构型模式~~~桥接模式(Java)
|
8天前
|
设计模式 缓存 算法
揭秘策略模式:如何用Java设计模式轻松切换算法?
【8月更文挑战第30天】设计模式是解决软件开发中特定问题的可重用方案。其中,策略模式是一种常用的行为型模式,允许在运行时选择算法行为。它通过定义一系列可互换的算法来封装具体的实现,使算法的变化与客户端分离。例如,在电商系统中,可以通过定义 `DiscountStrategy` 接口和多种折扣策略类(如 `FidelityDiscount`、`BulkDiscount` 和 `NoDiscount`),在运行时动态切换不同的折扣逻辑。这样,`ShoppingCart` 类无需关心具体折扣计算细节,只需设置不同的策略即可实现灵活的价格计算,符合开闭原则并提高代码的可维护性和扩展性。
24 2
|
8天前
|
设计模式 Java
Java 设计模式之谜:工厂模式与抽象工厂模式究竟隐藏着怎样的神奇力量?
【8月更文挑战第30天】在Java编程中,设计模式为常见问题提供了高效解决方案。工厂模式与抽象工厂模式是常用的对象创建型设计模式,能显著提升代码的灵活性、可维护性和可扩展性。工厂模式通过定义创建对象的接口让子类决定实例化哪个类;而抽象工厂模式则进一步提供了一个创建一系列相关或相互依赖对象的接口,无需指定具体类。这种方式使得系统更易于扩展和维护。
19 1
|
9天前
|
设计模式 Java
重构你的代码:探索Java中的混合、装饰器与组合设计模式
【8月更文挑战第30天】在软件开发中,设计模式为特定问题提供了结构化的解决方案,使代码更易理解、维护及扩展。本文将介绍三种常用的 Java 设计模式:混合模式、装饰器模式与组合模式,并附有示例代码展示实际应用。混合模式允许通过继承多个接口或抽象类实现多重继承;装饰器模式可在不改变对象结构的情况下动态添加新功能;组合模式则通过树形结构表示部分-整体层次,确保客户端处理单个对象与组合对象时具有一致性。
|
19天前
|
设计模式 算法 安全
Java编程中的设计模式:提升代码的可维护性和扩展性
【8月更文挑战第19天】在软件开发的世界里,设计模式是解决常见问题的一种优雅方式。本文将深入探讨Java编程语言中常用的几种设计模式,并解释如何通过这些模式来提高代码的可维护性和扩展性。文章不涉及具体的代码实现,而是侧重于理论和实践相结合的方式,为读者提供一种思考和改善现有项目的新视角。
|
19天前
|
设计模式 Java
常用设计模式介绍~~~ Java实现 【概念+案例+代码】
文章提供了一份常用设计模式的全面介绍,包括创建型模式、结构型模式和行为型模式。每种设计模式都有详细的概念讲解、案例说明、代码实例以及运行截图。作者通过这些模式的介绍,旨在帮助读者更好地理解源码、编写更优雅的代码,并进行系统重构。同时,文章还提供了GitHub上的源码地址,方便读者直接访问和学习。
常用设计模式介绍~~~ Java实现 【概念+案例+代码】
下一篇
DDNS