开发者社区> 桃子红了呐> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【每天一个java设计模式(八)】 - 桥接模式
【每天一个java设计模式(八)】 - 桥接模式
21 0
Java设计模式--桥接模式
桥接模式(别名:柄体模式) 将抽象部分于它的实现部分分离,使它们都可以独立地变化。 Bridge Pattern(Another Name:Handle-Body) Decouple an abstraction from its implementation so that the two can vary independently. 类图 模式
1631 0
Java 设计模式之桥接模式
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qingfeng812/article/details/8949352 《设计模式》中对桥接模式的定义为: 将抽象部分与它的实现部分分离,使他们可以独立地变化。
741 0
【Java设计模式】——单例模式
单例模式是Java中最简单的设计模式之一,属于创建型模式,它提供一种创建对象的最佳方式。 单例模式顾名思义就是单一的实例,涉及到一个单一的类,该类负责创建自己的对象,同时确保只有一个对象被创建,并且提供一种可以访问这个对象的方式,可以直接访问,不需要实例化该类的对象。 单例模式的特点:单例类只能有一个实例 这个实例必须由单例类自己创建单例类需要提供给外界访问这个实例
27 0
【每天一个java设计模式(三)】 - 单例模式
【每天一个java设计模式(三)】 - 单例模式
20 0
Java设计模式之单例模式
Java设计模式之单例模式
21 0
Java 设计模式之单例模式
Java 设计模式之单例模式
65 0
Java设计模式之一:单例模式
单例模式有好几种写法,可以根据需要与场景进行适当的选择。总结下单例模式的优缺点。 优点: 1、内存中对象唯一,可以节省内存空间; 2、可以做到避免频繁的创建销毁对象,提高性能; 3、避免对共享资源的不同对象占用,优化获取数据的途径; 4、为整个平台提供一个全局访问点。 缺点: 1、不适用于经常变化的对象; 2、滥用单例将带来一些负面问题,如为了节省资源将数据库连接池对象设计为的单例类,可能会导致共享连接池对象的程序过多而出现连接池溢出; 3、如果实例化的对象长时间不被利用,系统会认为该对象是垃圾而被回收,这可能会导致对象状态的丢失;
36 0
4267
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载