设计模式——桥接模式

桥接模式(Bridge Pattern):将抽象部分与其实现部分分离,使它们可以独立地变化。它是一种对象结构型设计模式。在软件系统中,如果某一部分功能存在2个变化的纬度,而这两个纬度可以相互分离,互不影响。因此便可以使用桥接模式,将两个变化的纬度进行抽象设计,两个抽象部分相关联,具体实现部分互相无任何关系。

桥接模式.jpg

1)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();
        
    }

}

你可能感兴趣的:(设计模式——桥接模式)