设计模式之桥接模式应用例题

设计模式之桥接模式应用例题

题目描述

某手机美图APP软件支持多种不同的图像格式,例如JPG、GIF、BMP等常用图像格式,同时提供了多种不同的滤镜对图像进行处理,例如木刻滤镜(Cutout)、模糊滤镜(Blur)、锐化滤镜(Sharpen)、纹理滤镜(Texture)等。现采用桥接模式设计该APP软件,使得该软件能够为多种图像格式提供一系列图像处理滤镜,同时还能够很方便地增加新的图像格式和滤镜,绘制对应的类图、类图说明并编程模拟实现。

类结构图及相关说明

在这里插入图片描述

Image类:抽象类,抽象类Image类其中定义一个Filter类型实现类接口的对象并可以维护该对象,抽象类Image类与Filter之间具有关联关系,抽象类Image类既可以包含抽象业务方法operation(),也可以包含具体业务方法Image()。
JPG类:扩充抽象类,扩充抽象类JPG类扩充抽象类Image类定义的接口,实现了抽象类Image类中声明的抽象业务方法operation(),并且可以调用实现类接口Filter类中定义的业务方法。
GIF类:扩充抽象类,扩充抽象类GIF类扩充抽象类Image类定义的接口,实现了抽象类Image类中声明的抽象业务方法operation(),并且可以调用实现类接口Filter类中定义的业务方法addFilter()。
BMP类:扩充抽象类,扩充抽象类BMP类扩充抽象类Image类定义的接口,实现了抽象类Image类中声明的抽象业务方法operation(),并且可以调用实现类接口Filter类中定义的业务方法。
Filter类:实现类接口,实现类接口Filter类声明了方法addFilter(),具体实现交给子类Blur类、Cutout类、Sharpen类、Texture类。
Blur类:具体实现类,Blur类具体实现了实现类接口Filter接口,程序运行时,将替换父类Filter对象,提供给抽象类Image类具体的业务操作方法addFilter()。
Cutout类:具体实现类,Cutout类具体实现了实现类接口Filter接口,程序运行时,将替换父类Filter对象,提供给抽象类Image类具体的业务操作方法addFilter()。
Sharpen类:具体实现类,Sharpen类具体实现了实现类接口Filter接口,程序运行时,将替换父类Filter对象,提供给抽象类Image类具体的业务操作方法addFilter()。
Texture类:具体实现类,Texture类具体实现了实现类接口Filter接口,程序运行时,将替换父类Filter对象,提供给抽象类Image类具体的业务操作方法addFilter()。

程序代码

Image类

//抽象类,定义一个Filter类型实现类接口的对象并可以维护该对象
//与Filter之间具有关联关系,既可以包含抽象业务方法,也可以包含具体业务方法
public abstract class Image {
    //定义一个Filter类型的对象
    protected Filter filter;
    //注入实现类接口对象
    public Image(Filter filter){
        super();
        this.filter = filter;
    }
    //声明抽象业务方法
    public abstract void operation();
}

JPG类

//扩充抽象类,扩充Image定义的接口,实现了Image中声明的抽象业务方法
//可以调用Filter中定义的业务方法
public class JPG extends Image{
    public JPG(Filter filter){
        super(filter);
    }
    //实现了Image中声明的抽象业务方法
    @Override
    public void operation() {
        System.out.print("这是一个JPG格式的图片!!!");
        filter.addFilter(); //调用Filter中定义的业务方法
    }
}

GIF类

//扩充抽象类,扩充Image定义的接口,实现了Image中声明的抽象业务方法
//可以调用Filter中定义的业务方法
public class GIF extends Image{
    public GIF(Filter filter){
        super(filter);
    }
    //实现了Image中声明的抽象业务方法
    @Override
    public void operation() {
        System.out.print("这是一张GIF格式的图片!!!");
        filter.addFilter();//调用Filter中定义的业务方法
    }
}

BMP类

//扩充抽象类,扩充Image定义的接口,实现了Image中声明的抽象业务方法
//可以调用Filter中定义的业务方法
public class BMP extends Image{
    public BMP(Filter filter){
        super(filter);
    }
    //实现了Image中声明的抽象业务方法
    @Override
    public void operation() {
        System.out.print("这是一张BMP格式的图片!!!");
        filter.addFilter();//调用Filter中定义的业务方法
    }
}

Filter类

//实现类的接口,定义实现类的接口,声明方法,具体实现交给子类
public interface Filter {
    public void addFilter(); //声明方法
}

Blur类

//具体实现类,具体实现了Filter接口,程序运行时,将替换父类Filter对象,
//提供给抽象类Image具体的业务操作方法
public class Blur implements Filter{
    //实现Filter接口中声明的方法
    @Override
    public void addFilter() {
        System.out.println("增加模糊滤镜(Blur)!!!");
    }
}

Cutout类

//具体实现类,具体实现了Filter接口,程序运行时,将替换父类Filter对象,
//提供给抽象类Image具体的业务操作方法
public class Cutout implements Filter{
    //实现Filter接口中声明的方法
    @Override
    public void addFilter() {
        System.out.println("增加木刻滤镜(Cutout)!!!");
    }
}

Sharpen类

//具体实现类,具体实现了Filter接口,程序运行时,将替换父类Filter对象,
//提供给抽象类Image具体的业务操作方法
public class Sharpen implements Filter{
    //实现Filter接口中声明的方法
    @Override
    public void addFilter() {
        System.out.println("增加模锐化滤镜(Sharpen)!!!");
    }
}

Texture类

//具体实现类,具体实现了Filter接口,程序运行时,将替换父类Filter对象,
//提供给抽象类Image具体的业务操作方法
public class Texture implements Filter{
    //实现Filter接口中声明的方法
    @Override
    public void addFilter() {
        System.out.println("增加纹理滤镜(Texture)!!!");
    }
}

Client类

//客户端测试类
public class Client {
    public static void main(String[] args) {
        Filter filter1 = new Sharpen();  //创建一个锐化滤镜
        Filter filter2 = new Cutout();  //创建一个木刻滤镜
        Filter filter3 = new Blur();    //创建一个模糊滤镜
        Filter filter4 = new Texture(); //创建一个纹理滤镜
        Image image1 = new JPG(filter1); //创建一个JPG格式具体实现类
        Image image2 = new GIF(filter2); //创建一个GIF格式具体实现类
        Image image3 = new BMP(filter3); //创建一个BMP格式具体实现类
        Image image4 = new BMP(filter4); //创建一个BMP格式具体实现类
        image1.operation();  //进行操作
        image2.operation();  //进行操作
        image3.operation();  //进行操作
        image4.operation();  //进行操作
    }
}

运行结果

在这里插入图片描述

  • 16
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

稚皓君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值