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


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

    题目描述

    某手机美图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();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    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中定义的业务方法
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    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中定义的业务方法
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    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中定义的业务方法
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    Filter类

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

    Blur类

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

    Cutout类

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

    Sharpen类

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

    Texture类

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

    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();  //进行操作
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    运行结果

    在这里插入图片描述

  • 相关阅读:
    【Tent-SSA-BP】基于Tent混沌映射改进的麻雀算法优化BP神经网络回归预测研究(Matlab代码实现)
    如何将 Python 项目打包成 exe,另带卸载功能!
    一维数组笔试题及其解析
    leetcode 刷题 log day 52(子序列系列
    LeetCode 53.最大子数组和17.电话号码的字母组合
    net6 项目搭建及引用框架记录(log4net,autofac,exception,api result,jwt,efcore)二、配置log4net
    小程序开发学习
    Spring Boot 面试热点(三)
    JAVA经典百题之排序算法
    Linux网络编程6——poll和epoll
  • 原文地址:https://blog.csdn.net/m0_46669450/article/details/125547470