• java常用设计模式九:桥接模式


    一、概述

           将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式。比如存在2个维度,第一个维度有一个抽象类A和对应的子类A1和A2;第二个维度有另一个接口B和对应的子类B1和B2;接口A依赖接口B。

           所谓的独立变化就是当我们修改A1和A2或是修改B1和B2对方都不用修改。这种抽象依赖就像桥接

    二、示例

     比如上图所示:动物(抽象类)路(接口),动物有狗(具体类)猫(具体类),路有大路(具体类)小路(具体类),要实现的就是  “什么动物在什么路走路”,这就是一个2维度组合,而且2个维度都可以进行独立变化。

     1)动物接口

    public interface Animal {
        void walk();
    }

    2)动物实现类

    public class Dog implements Animal {
        public void walk() {
            System.out.println("狗走路");
        }
    }
    public class Cat implements Animal {
        public void walk() {
            System.out.println("猫走路");
        }
    }

    3)路抽象类

    public abstract class Road {
        protected Animal animal;
        public Road(Animal animal){
            this.animal = animal;
        }
        public abstract void place();
    }

    4)路的实现类

    public class BigRoad extends Road {
    
        public BigRoad(Animal animal) {
            super(animal);
        }
        public void place() {
            System.out.println("在大路上");
            animal.walk();
        }
    }
    package bridge.demo;
    
    /**
     * @author Administrator
     * @date 2019/01/11
     */
    public class SmallRoad extends Road{
    
        public SmallRoad(Animal animal) {
            super(animal);
        }
    
        public void place() {
            System.out.println("在小路上");
            animal.walk();
        }
    }

    5)测试类

    public class Client {
        public static void main(String[] args){
            Animal dog = new Dog();
            Animal cat = new Cat();
            Road road1= new BigRoad(dog);
            Road road2= new SmallRoad(cat);
            Road road3= new SmallRoad(dog);
            Road road4= new SmallRoad(cat);
            road1.place();
            road2.place();
            road3.place();
            road4.place();
        }
    }
    在大路上
    狗走路
    在小路上
    猫走路
    在小路上
    狗走路
    在小路上
    猫走路

    细心的人会发现:桥接模式与抽象工厂模式很相似,都是2个维度上的变化。但是有以下区别:

    • 桥接模式属于结构型模式,不是以创建对象的为目的,一般对象的创建是交给Client类去new 一个对象,对象已经存在后,怎么来组合使用这些对象;
    • 抽象工厂模式属于创建型模式,以创建对象为目的,一般会在工厂类内部提供new 一个对象的方法。
  • 相关阅读:
    Hibernate保存方式的区别
    活动图
    Apache新增站点配置
    Apache安装
    360度全方位沟通向上沟通
    时间转换
    PostgreSQL 9.2中将引入生成JSON数据功能
    Delphi 读取dbgrid中的选中一行的代码及定位函数
    彻底解决Delphi的DBGrid控件鼠标滚轮问题(转)
    DB2与PostgreSQL开发的异同
  • 原文地址:https://www.cnblogs.com/boshen-hzb/p/10255714.html
Copyright © 2020-2023  润新知