zoukankan      html  css  js  c++  java
  • 设计模式—桥接模式

    如果子类的扩展有两个维度,这时候想解耦和来解决排列组合问题。用组合代替继承。

    比如说就礼物这东西而言,可大致抽象分为两类,一种是温暖型的,一种是狂野型的,在礼物的实现上可具体为花或者钻戒或者大炮等等;

    在抽象这个维度上可能会扩展,在具体实现上也会扩展,就会形成各式各样的排列组合:温暖的***,狂野的***,实用的***。

    如果这个时候使用继承那么继承体系将会非常臃肿。

    桥接模式中的所谓脱耦,就是指在一个软件系统的抽象化和实现化之间使用关联关系(组合或者聚合关系)而不是继承关系,从而使两者可以相对独立地变化,这就是桥接模式的用意。

    代码实现:

    1.礼物抽象类

    package com.bjsxt.dp.bridge;
    
    public class Gift {
        protected GiftImpl impl;
    }

    在礼物抽象类中聚合了礼物的实现类,而不在使用继承的方式。

    2.礼物实现类

    package com.bjsxt.dp.bridge;
    
    public class GiftImpl {
    
    }

    3.继承礼物抽象类的WarmGift

    package com.bjsxt.dp.bridge;
    
    public class WarmGift extends Gift{
        public WarmGift(GiftImpl impl) {
            this.impl = impl;
        }
    }

    4.继承礼物抽象类的WildGift

    package com.bjsxt.dp.bridge;
    
    public class WildGift extends Gift {
    
        public WildGift(Ring ring) {
            this.impl = impl;
        }
        
    }

    5.继承礼物实现类的Flower

    package com.bjsxt.dp.bridge;
    
    public class Flower extends GiftImpl {
    
    }

    6.继承礼物实现类的Ring

    package com.bjsxt.dp.bridge;
    
    public class Ring extends GiftImpl {
    
    }

    桥梁模式的优点:

    桥梁模式分离了抽象部分和实现部分,从而极大地提供了系统的灵活性。

    让抽象部分和实现部分独立出来,分别定义接口,这有助于对系统进行分层,从而产生更好的结构化的系统。

  • 相关阅读:
    最近工作
    有点感受
    日子有点快
    IDEA配置spring
    IDEA配置hibernate
    mysql插入中文乱码
    深夜配置一把struts2
    IDEA 配置SSH2
    找工作的事情
    YTU 2509: 奇怪的分式
  • 原文地址:https://www.cnblogs.com/xiangkejin/p/6874862.html
Copyright © 2011-2022 走看看