zoukankan      html  css  js  c++  java
  • 桥接模式(Bridge)

    在现实生活中,某些类具有两个或多个维度的变化,如图形既可按形状分,又可按颜色分。将颜色和形状两两结合的方式成为桥接。

    桥接模式的结构与实现

    可以将抽象化部分与实现化部分分开,取消二者的继承关系,改用组合关系。
    1. 模式的结构
    桥接(Bridge)模式包含以下主要角色。
    抽象化(Abstraction)角色:定义抽象类,并包含一个对实现化对象的引用。

    1. 扩展抽象化(Refined Abstraction)角色:是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法。
    2. 实现化(Implementor)角色:定义实现化角色的接口,供扩展抽象化角色调用。
    3. 具体实现化(Concrete Implementor)角色:给出实现化角色接口的具体实现。

    举例:我们画不同颜色的形状

    //首先是形状类和颜色的抽象类
    
      //该类为一个抽象类,主要提供画形状的方法 
    public abstract class Shape {
    
        Color color;//形状里要有颜色的实例
      
        public void setColor(Color color) {
            this.color = color;
        }
        
        public abstract void draw();
    }
    
    //颜色类
    public interface Color {
        public void bepaint(String shape);
    }
    
    //------------------------------------------------
    
    
    //具体形状的实现:圆形
    public class Circle extends Shape{
     
        public void draw() {
            color.bepaint("圆形");
        }
    }
    
    //具体形状的实现:长方形
    public class Rectangle extends Shape{
     
        public void draw() {
            color.bepaint("长方形");
        }
     
    }
    
    //具体形状的实现:正方形
    public class Square extends Shape{
     
        public void draw() {
            color.bepaint("正方形");
        }
     
    }
    
    
    //具体颜色的实现:黑色
    public class Black implements Color{
     
        public void bepaint(String shape) {
            System.out.println("黑色的" + shape);
        }
    }
    
    //具体颜色的实现:灰色
    public class Gray implements Color{
     
        public void bepaint(String shape) {
            System.out.println("灰色的" + shape);
        }
    }
    
    //具体颜色的实现:白色
    public class White implements Color{
     
        public void bepaint(String shape) {
            System.out.println("白色的" + shape);
        }
     
    }
    
    //测试
        public static void main(String[] args) {
            //白色
            Color white = new White();
            //正方形
            Shape square = new Square();
            //白色的正方形
            square.setColor(white);
            square.draw();
    
            //长方形
            Shape rectange = new Rectangle();
            rectange.setColor(white);
            rectange.draw();
    
    
        }
    
    

    运行结果

  • 相关阅读:
    opencv::绘制-基本几何
    公共盘访问方法(更改用户登录公共盘)
    testlink数据库访问密码修改
    SQL Server外部链接时报错:Error locating serverInstance specified
    SQL server数据库端口访问法
    python模块之wordcloud
    随性练习:python字典实现文本合并
    python模块之numpy
    python模块之openpyxl扩展
    python模块之openpyxl介绍
  • 原文地址:https://www.cnblogs.com/love-xk/p/13175006.html
Copyright © 2011-2022 走看看