zoukankan      html  css  js  c++  java
  • 设计模式(8)---桥接模式

    在这里插入图片描述

    上一篇:适配器模式

    1.什么是桥接模式?

      桥接模式也称为柄体模式或者接口模式,它是将抽象部分和它的实现部分进行分离解耦,并且使得他们二者可以独立的变化。下图是一种典型的继承方式转换为桥接模式的案例图:

    在这里插入图片描述
      如果说上面的图片看不懂,那再举个栗子:
    在这里插入图片描述
      人大体可以分为两部分:灵魂(抽象部分) 肉体(具体实现),孙悟空的灵魂是一个猴子,但是肉体却是人形。这和桥接模式的基本理念是一致的(抽象部分和实现部分分离解耦,并使得二者可以独立变化,不同的灵魂和不同的肉体进行组合可以实现不同的实体对象)。

    2.桥接模式的优缺点?

    1.优点:
    1)抽象部分与具体实现分离
    2)具有良好的可扩展性
    2.缺点:
    1)此模式会导致项目结构的复杂度增加

    3.代码实现桥接模式?

      下面用代码实现一个桥接模式的案例:

    我们以天使小狗和魔鬼蝙蝠两种生物为例:

    1.创建灵魂接口

    /**
     * 灵魂接口(灵魂可以是魔鬼、天使)
     */
    public interface Soul {
    
        /**
         * 打印灵魂名称
         */
        void name();
    }
    

    2.创建魔鬼类型灵魂

    /**
     * 魔鬼
     */
    public class Devil  implements Soul {
        @Override
        public void name() {
            System.out.print("魔鬼");
        }
    }
    

    3.创建天使类型灵魂

    /**
     * 天使
     */
    public class Angel implements Soul {
        @Override
        public void name() {
            System.out.print("天使");
        }
    }
    

    4.创建生物类

    /**
     * 抽象的生物类
     */
    public abstract class Biological {
    
        /**
         *生物具有灵魂属性
         */
        protected  Soul soul;
    
        public Biological(Soul soul) {
            this.soul = soul;
        }
    
        public void info(){
            //打印灵魂的名称
            soul.name();
        }
    }
    

    5.创建具体的生物类—小狗

    /**
     * 小狗类
     */
    public class Dog extends Biological{
        public Dog(Soul soul) {
            super(soul);
        }
    
        //重写打印灵魂的方法(ctrl + O)
    
        @Override
        public void info() {
            super.info();
            System.out.println("小狗");
        }
    }
    

    6.创建具体的生物—蝙蝠类

    /**
     * 蝙蝠类
     */
    public class Bat extends Biological {
        public Bat(Soul soul) {
            super(soul);
        }
    
        @Override
        public void info() {
            super.info();
            System.out.println("蝙蝠");
        }
    }
    

    7.测试类

    注意:我们在给具体的生物赋予灵魂的时候直接new一个具体的灵魂给生物就ok了

    public class Test {
    
        public static void main(String[] args) {
          Biological biological =new Dog(new Angel());
          biological.info();
    
          Biological biological2 = new Bat(new Devil());
          biological2.info();
    
        }
    }
    

    在测试类中,我们给小狗这种生物new了一个天使灵魂,给蝙蝠这种生物new了一个魔鬼灵魂

    8.测试结果
    在这里插入图片描述

      当我们将生物分解为灵魂肉体两部分的时候,无论是我们需要增加这两部分中的任何一种,都不会影响到另外一部分。比如我们需要增加具体实现小猫、小兔子,灵魂部分我们不需要做任何修改。而且我们可以通过不同的灵魂和不同的肉体进行任意组合,实现生物的“多样性”……比如我们熟知的天蓬元帅就是灵魂和肉体组合太随意造就的……

    下一篇:装饰模式

  • 相关阅读:
    查看进程,按内存从大到小 ,查看进程,按CPU利用率从大到小排序
    haproxy 安装 各个参数的测试
    ps -C nginx --no-header |wc -l
    lsof -ntP -i:端口取出 动行程序的PID 然后xargs kill -9 这个进程
    linux 普通用户切换成root免密码
    inter x86 emulator accelerator(HAXM installer) not compatible with windows
    react-native 相关问题
    SQLCE数据工具(Flyhoward Ltd SDF Viewer)
    Android APK反编译就这么简单 详解(附图)
    react.js 教程之 Installation 安装
  • 原文地址:https://www.cnblogs.com/wgty/p/12810433.html
Copyright © 2011-2022 走看看