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#中的Json序列化
    c#在sqlserver中使用EF框架
    Mvc中模拟模型
    localdb启动
    List泛型用法(半转载半原创)
    C#中真正的属性
    委托的简介、使用和简单事件
    类嵌套_list泛型_餐馆点菜例
    JavaIO
    JavaIO
  • 原文地址:https://www.cnblogs.com/huang-changfan/p/10950133.html
Copyright © 2011-2022 走看看