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

Posted shangzh!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式之桥接模式应用例题相关的知识,希望对你有一定的参考价值。

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

题目描述

某手机美图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();  //进行操作
    

运行结果

以上是关于设计模式之桥接模式应用例题的主要内容,如果未能解决你的问题,请参考以下文章

设计模式之工厂方法模式应用例题

设计模式 之 桥接

学习设计模式之桥接模式

设计模式之桥接

设计模式之桥接模式

设计模式之适配器模式与桥接模式详解和应用