zoukankan      html  css  js  c++  java
  • Bridge 桥梁模式

     

     

     

     注:桥梁模式是结构型设计模式,将抽象部分与它的实现部分相分离,使他们可以独立的变化。 

     

    抽象部分可能有n种实现,而实现部分可能有n种实现方式,采用享元模式,减少子类数据。

     

    曾经看过一个桥梁模式相关的例子,觉得挺好的。一个客户端需要调用一个作画程序。对画笔要求为,三种笔芯大小:小、中、大;三种颜色:红、黑、黄。

     

    下面用java代码实现如下

    1,颜色接口

     

    package com.pattern.structure.bridge;
    
     
    
    public interface Color {
    
     
    
    public void use() ;
    
    }

     

     

    2,三种颜色实现

     

    package com.pattern.structure.bridge;
    
     
    
    public class Red implements Color {
    
     
    
    @Override
    
    public void use() {
    
     
    
    System.out.println("use red...");
    
    }
    
     
    
    }

     

     

    package com.pattern.structure.bridge;
    
     
    
    public class Black implements Color {
    
     
    
    @Override
    
    public void use() {
    
     
    
    System.out.println("use black...");
    
    }
    
     
    
    }

     

     

     

    package com.pattern.structure.bridge;
    
     
    
    public class Yellow implements Color {
    
     
    
    @Override
    
    public void use() {
    
     
    
    System.out.println("use yellow...");
    
    }
    
     
    
    }

     

     

     

    3,三种大小笔触画法

     

    package com.pattern.structure.bridge;
    
     
    
    public abstract class Pen {
    
     
    
    protected Color color ;
    
     
    
    public Pen(Color color) {
    
     
    
    this.color = color ;
    
    }
    
     
    
    public abstract void draw() ;
    
    }

     

    package com.pattern.structure.bridge;
    
     
    
    public class SmallPen extends Pen {
    
     
    
    public SmallPen(Color color) {
    
    super(color);
    
    }
    
     
    
    @Override
    
    public void draw() {
    
     
    
    color.use(); 
    
    System.out.println("use small pen...");
    
     
    
    }
    
     
    
    }

     

    package com.pattern.structure.bridge;
    
     
    
    public class MiddlePen extends Pen {
    
     
    
    public MiddlePen(Color color) {
    
    super(color);
    
    }
    
     
    
    @Override
    
    public void draw() {
    
     
    
    color.use(); 
    
    System.out.println("use middle pen...");
    
     
    
    }
    
     
    
    }

     

     

    package com.pattern.structure.bridge;
    
     
    
    public class BigPen extends Pen {
    
     
    
    public BigPen(Color color) {
    
    super(color);
    
    }
    
     
    
    @Override
    
    public void draw() {
    
     
    
    color.use(); 
    
    System.out.println("use big pen...");
    
     
    
    }
    
     
    
    }

     

     

    4,客户端调用

     

    package com.pattern.structure.bridge;
    
     
    
    public class Client {
    
     
    
    public static void main(String[] args) {
    
     
    
    Color color = new Red() ;
    
    Pen pen = new BigPen(color) ;
    
    pen.draw();
    
    }
    
    }

     

     

     

    从上代码可以看出,如果不实用桥梁模式,要满足需求,得有3x3个子类,现在是颜色使用 3个子类,笔触大小画法 个子类。如果颜色种类多样,笔触大小多样,使用桥梁模式和不实用桥梁模式的子类数量相差更大。

     

    桥梁模式通用类图

     

     

     

    ------

      文章只为技术交流学习,若所写有误,请斧正,评论或消息与我,为不误导后来学习的人;若有不小心所写侵权,请告知我;若转载,请注明出处。

     

     

     

     

  • 相关阅读:
    关于权限控制
    关于<!DOCTYPE>
    Oracle恢复目录的管理使用简要
    绑定变量介绍
    重做日志时间戳说明
    UNDO表空间监控说明
    Oracle rac进阶管理专家指导系列文档
    延迟块清除介绍
    ORA12500内存耗尽一例
    undo自动调优介绍
  • 原文地址:https://www.cnblogs.com/sten/p/3352120.html
Copyright © 2011-2022 走看看