桥接模式(Bridge Pattern):将抽象部分与其实现部分分离,使它们可以独立地变化。它是一种对象结构型设计模式。在软件系统中,如果某一部分功能存在2个变化的纬度,而这两个纬度可以相互分离,互不影响。因此便可以使用桥接模式,将两个变化的纬度进行抽象设计,两个抽象部分相关联,具体实现部分互相无任何关系。
桥接模式.jpg1)Client(客户端):外部使用程序
2)Abstraction(抽象类):定义抽象类的接口,一般将最基础业务方法的一个纬度定义为抽象类,并在类中定义抽象方法;
3)Implementor(实现类接口):定义实现类的接口,与Abstraction不同的另外一个纬度的基类或者是接口;
4)RefinderAbstracion(扩充抽象类):抽象类的实现者,根据不同变化纬度对应不同类;
5)ConcreteImplementor(具体实现类):实现抽象类接口,完成不同实现;
示例:不同操作系统,显示不同格式的图片, 维度一:操作平台(Windows Linux Mobile),维度二:图片格式(JPG, PDF, PNG)
操作系统类 相当于Abstraction
/**
*
* @author apple
*
* 操作系统
*
*/
public abstract class OperatingSystem {
// 图片格式类
private IPictureFormat pictureFormat;
public OperatingSystem(IPictureFormat pictureFormat) {
super();
this.pictureFormat = pictureFormat;
}
/**
* 显示操作系统
*/
protected void operatingSystemtype() {
this.pictureFormat.imageFormat();
}
}
windows、linux、mobile 相当于RefinderAbstracion(扩充抽象类)
/**
*
* @author apple
*
* Windows
*
*/
public class Windows extends OperatingSystem {
public Windows(IPictureFormat pictureFormat) {
super(pictureFormat);
// TODO Auto-generated constructor stub
}
@Override
protected void operatingSystemtype() {
// TODO Auto-generated method stub
super.operatingSystemtype();
System.out.println(" 图片显示在 Windows");
}
}
/**
*
* @author apple
*
* Linux
*
*/
public class Linux extends OperatingSystem {
public Linux(IPictureFormat pictureFormat) {
super(pictureFormat);
// TODO Auto-generated constructor stub
}
@Override
protected void operatingSystemtype() {
// TODO Auto-generated method stub
super.operatingSystemtype();
System.out.println(" 图片显示在 Linux");
}
}
/**
*
* @author apple
*
* Mobile
*
*/
public class Mobile extends OperatingSystem {
public Mobile(IPictureFormat pictureFormat) {
super(pictureFormat);
// TODO Auto-generated constructor stub
}
@Override
protected void operatingSystemtype() {
// TODO Auto-generated method stub
super.operatingSystemtype();
System.out.println(" 图片显示在 Mobile");
}
}
IPictureFormat 相当于 Implementor(实现类接口)
/**
*
* @author apple
*
* 图片格式
*
*/
public interface IPictureFormat {
/**
* 显示图片格式
*/
void imageFormat();
}
PNG、JPG、PNG 相当于ConcreteImplementor
/**
*
* @author apple
*
* PNG
*
*/
public class PNG implements IPictureFormat {
@Override
public void imageFormat() {
// TODO Auto-generated method stub
System.out.print("图片格式:PNG");
}
}
/**
*
* @author apple
*
* PDF
*
*
*/
public class PDF implements IPictureFormat {
@Override
public void imageFormat() {
// TODO Auto-generated method stub
System.out.print("图片格式:PDF");
}
}
/**
*
* @author apple
*
* JPG
*
*
*/
public class JPG implements IPictureFormat {
@Override
public void imageFormat() {
// TODO Auto-generated method stub
System.out.print("图片格式:JPG");
}
}
public class Client {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 不同操作系统,显示不同格式的图片, 维度一:操作平台(Windows Linux Mobile),维度二:图片格式(JPG, PDF, PNG)
// Mobile : PNG
Mobile mobile = new Mobile(new PNG());
mobile.operatingSystemtype();
// Linux : PDF
Linux linux = new Linux(new PDF());
linux.operatingSystemtype();
// Windows : JPG
Windows windows = new Windows(new JPG());
windows.operatingSystemtype();
}
}
网友评论