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

设计模式之桥接模式

作者: Catch6 | 来源:发表于2022-01-27 10:16 被阅读0次

    在 GoF 的《设计模式》一书中,桥接模式被定义为:“将抽象和实现解耦,让它们可以独立变化。”定义中的“抽象”,指的并非“抽象类”或“接口”,而是被抽象出来的一套“类库”,它只包含骨架代码,真正的业务逻辑需要委派给定义中的“实现”来完成。而定义中的“实现”,也并非“接口的实现类”,而是一套独立的“类库”。

    应用场景

    系统可能有多个维度,每个维度都有可能变化。

    类图

    image.png

    将Color类组合在Shape中来将形状和颜色解耦,各自维护各自的变化,这里体现了组合优于继承的设计原则。

    桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。

    代码实现

    Color

    public abstract class Color {
    
        public abstract void paint(String shape);
    
    }
    

    Red

    public class Red extends Color {
    
        @Override
        public void paint(String shape) {
            System.out.println("红色的" + shape);
        }
    
    }
    

    Green

    public class Green extends Color {
    
        @Override
        public void paint(String shape) {
            System.out.println("绿色的" + shape);
        }
    
    }
    

    Shape

    public abstract class Shape {
    
        protected Color color;
    
        public void setColor(Color color) {
            this.color = color;
        }
    
        public abstract void draw();
    
    }
    

    Circle

    public class Circle extends Shape {
    
        @Override
        public void draw() {
            color.paint("圆形");
        }
    
    }
    

    Square

    public class Square extends Shape {
    
        @Override
        public void draw() {
            color.paint("正方形");
        }
    
    }
    

    Main

    public class Main {
    
        public static void main(String[] args) {
            Shape shape;
            Color color;
    
            color = new Red();
            shape = new Circle();
            shape.setColor(color);
            shape.draw();
    
            color = new Green();
            shape = new Square();
            shape.setColor(color);
            shape.draw();
        }
    
    }
    

    至此,我们已经完成了桥接模式的学习。桥接模式在实际项目中并不常用,这里我们了解认识即可。

    相关文章

      网友评论

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

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