• 设计模式(十五)——桥接模式


    1.描述

     将桥接部分与他的实现部分分离,是他们都可以独立的变化。

    2.模式的使用

    ·抽象(Abstraction):是一个抽象类,该抽象类含有Implementor的声明,即维护一个Implementor类型对象。

    ·实现者(Implementor):实现者是一个接口或抽象类,该接口(抽象类)中的方法不定与Abstraction类中的方法一致。Implementor接口(抽象类)负责定义基本操作,而Abstraction类负责定义基于这些操作的较高层次操作。

    ·细化抽象(Refined Abstraction):细化抽象是抽象的一个一个子类,该子类重写(覆盖)抽象中的抽象方法时,再给出一些必要操作后,将委托所维护的Implementor类型对象调用相应方法。

    ·具体实现者(Concrete Implementor):具体实现者是实现(扩展)Implementor接口(抽象类)的类。

    3.使用情景

    ·不想让抽象和某些重要的实现代码是固定的绑定关系,这部分实现可在运行时动态实现。

    ·抽象和实现者都可以继承的方式独立地扩展而不受影响,程序运行期间可能需要动态的将一个抽象子类的实例与一个实现者的子类实例进行组合。

    ·希望对实现者层次代码的修改对抽象层不产生影响,及即抽象层的代码不用重新编译,反之亦然。

    4.优点

    ·桥接模式分离实现与抽象,使抽象和实现可以独立扩展。

    ·满足“开——闭”原则

    5.UML

    6案例

    中央电视台有CCTV5和CCTV6,一个负责制作体育节目,一个负责之多电影节目。使用桥接模式将抽象与实现分离。

     1 package 桥接模式;
     2 
     3 import java.util.ArrayList;
     4 
     5 public class test1 {
     6 
     7     public static void main(String[] args) {
     8 
     9     }
    10 
    11 }
    12 
    13 /*
    14  * 抽象
    15  */
    16 abstract class CCTV{
    17     Program programMaker;
    18     public abstract void makeProgram();
    19 }
    20 
    21 /*
    22  * 实现者
    23  */
    24 interface Program{
    25     public ArrayList<String> makeTVProgram();
    26 }
    27 
    28 /*
    29  * 具体实现者
    30  */
    31 class AthleticProgram implements Program{
    32     ArrayList<String> content;
    33     AthleticProgram(){
    34         this.content = new ArrayList<String>();
    35     }
    36     public ArrayList<String> makeTVProgram() {
    37         content.clear();
    38         content.add("巴西足球比赛");
    39         content.add("比赛结束");
    40         return content;
    41     }
    42     
    43 }
    44 
    45 /*
    46  * 具体实现者
    47  */
    48 class FilmProgram implements Program{
    49     ArrayList<String> content;
    50     FilmProgram(){
    51         this.content = new ArrayList<String>();
    52     }
    53     public ArrayList<String> makeTVProgram() {
    54         content.clear();
    55         content.add("肖申克的救赎");
    56         return content;
    57     }
    58     
    59 }
    60 
    61 /*
    62  * 细化抽象
    63  */
    64 class CCTV5 extends CCTV{
    65     ArrayList<String> content;
    66     CCTV5(Program programMaker){
    67         this.programMaker = programMaker;
    68         this.content = new ArrayList<String>();
    69     }
    70     @Override
    71     public void makeProgram() {
    72         content = programMaker.makeTVProgram();
    73         
    74     }
    75     
    76 }

    大概就是这么个意思,不运行了。

    和策略模式思想相近。

  • 相关阅读:
    Ubuntu中root用户和user用户的相互切换
    MVCC
    vs2010和C#4.0
    使用命令选项连接到MySQL服务器(参考MySQL官方文档)
    使用外部数据源连接WIN版本的MySQL时,测试连接无法通过
    MySQL学习进阶路线
    解决linux(centos7)重新安装mysql systemctl start mysqld.service时报错
    最最完整的 MySQL 规范都在这了
    Linux性能测试与调优的15条常用命令
    (转载)libevent源码深度剖析二
  • 原文地址:https://www.cnblogs.com/cxy2016/p/7670312.html
Copyright © 2020-2023  润新知