zoukankan      html  css  js  c++  java
  • 1.8(设计模式)桥接模式

    桥接模式可以将抽象和实现分离开来,两者可以单独变化互不干扰。

    两者之间通过一个桥梁连接,所以称为桥接模式。

    下面举一个具体的例子,假设这里有一个抽象类Shape,还有一些实现类RedCircle,GreenCircle.

    它们之间通过桥梁DrawAPI接口连接起来。

    桥梁接口(桥接模式中的桥梁)

    public interface DrawAPI {
        public void drawCircle(float r,float x, float y);
    }

    具体的实现类要实现桥梁接口(桥接模式中的实现部分)

    GreenCircle

    public class GreenCircle implements DrawAPI{
    
        @Override
        public void drawCircle(float r, float x, float y) {
            System.out.println("draw greenCircle" + "r:" + r +" x:" + x + " y:" + y);
        }
    
    }

    RedCircle

    public class RedCircle implements DrawAPI{
    
        @Override
        public void drawCircle(float r, float x, float y) {
            System.out.println("draw redCircle" + "r:" + r +" x:" + x + " y:" + y);
        }
    }

    Shape(桥接模式中的抽象部分) Shape使用了DrawAPI(桥梁)

    public abstract class Shape {
        protected DrawAPI drawAPI;
        
        public Shape(DrawAPI drawAPI) {  // 抽象类也是类,只是不能由自身实例化,
            this.drawAPI = drawAPI;      //一般通过子类实例化(默认调用无参构造方法),如果添加了构造方法,需要在子类中引用。
        }
        
        public abstract void draw();
    }

    Circle :Shape的具体类

    public class Circle extends Shape{
        private float r;
        private float x;
        private float y;
        
        
        public Circle(float r, float x, float y,DrawAPI drawAPI) {
            super(drawAPI);
            // TODO Auto-generated constructor stub
            this.r = r;
            this.x = x;
            this.y = y;
        }
    
        @Override
        public void draw() {
            // TODO Auto-generated method stub
            drawAPI.drawCircle(r, x, y);
        }
    }

    测试:

    public class Main {
        public static void main(String[] args) {
            Shape greenCircle = new Circle(2, 0, 0, new GreenCircle());
            greenCircle.draw();
            Shape redCircle = new Circle(2, 0, 0, new RedCircle());
            redCircle.draw();
        }
    }
    draw greenCircler:2.0 x:0.0 y:0.0
    draw redCircler:2.0 x:0.0 y:0.0

    上述抽象和实现之间通过桥梁连接,抽象和实现之间可以独立的变换,改变具体的实现类不会对抽象类造成影响。

    改变抽象类也不会对实现类造成影响,只要两者连接的桥梁没有发生改变,两者都可以独立的变换而且易于扩展。

  • 相关阅读:
    C#读写XML no
    ComboBox、ListBox绑定和获取数据 no
    win7 安装oracle 11g no
    2011没有惊天动地 no
    Oracle 删除重复数据只留一条 no
    Oracle 创建用户并分配权限 no
    Oracle 导出、导入某用户所有数据(包括表、视图、存储过程...) no
    谢谢,博客园这么快就审批通过了我的申请!
    Eclipse 中 JAVA AWT相关包不提示问题(解决)
    Eclipse java项目转Maven项目
  • 原文地址:https://www.cnblogs.com/huang-changfan/p/10950133.html
Copyright © 2011-2022 走看看