设计模式之桥接模式应用例题
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(); //进行操作
运行结果
以上是关于设计模式之桥接模式应用例题的主要内容,如果未能解决你的问题,请参考以下文章