美文网首页
设计模式——桥接模式

设计模式——桥接模式

作者: 写一本2000000的书 | 来源:发表于2019-09-30 02:43 被阅读0次

    桥接模式(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();
            
        }
    
    }
    

    相关文章

      网友评论

          本文标题:设计模式——桥接模式

          本文链接:https://www.haomeiwen.com/subject/oondyctx.html