zoukankan      html  css  js  c++  java
  • java 之 桥接模式(大话设计模式)

    桥接模式定义为:将抽象部分与它的实现部分分离,使它们都可以独立的变化。

    第一次看设计模式的时候,不是很清楚这句话的意思,随着笔者的不断开发,发现有一种场景,

    继承关系多了,不易于维护父类,而笔者认为桥接模式的出现很好的解决了这个问题。用聚合解决继承的父类难维护性。先看下桥接模式设计图。

    大话设计模式-类图

    以上类图很简单易懂,先看下笔者的demo

    /**
     * 操作接口
     */
    public interface IOperate {
    
        public void operate();
    }
    /**
     * 品牌父类
     */
    public class Brand {
    
        private IOperate operate;
    
    
        public Brand(IOperate operate) {
            super();
            this.operate = operate;
        }
    
        public void operate() {
            operate.operate();
        }
    
        public IOperate getOperate() {
            return operate;
        }
    
        public void setOperate(IOperate operate) {
            this.operate = operate;
        }
    }
    /**
     * 玩游戏
     */
    public class Game implements IOperate{
        @Override
        public void operate() {
            System.out.println("玩游戏");
        }
    
    }
    /**
     * 看通讯录
     */
    public class MailList implements IOperate {
        @Override
        public void operate() {
            System.out.println("看通讯录");
        }
    
    }
    /**
     * M品牌
     */
    public class MBrand extends Brand{
    
        public MBrand(IOperate operate) {
            super(operate);
        }
    
    }
    /**
     * N品牌
     */
    public class NBrand extends Brand{
    
        public NBrand(IOperate operate) {
            super(operate);
        }
    
    }
    /**
     * 客户端
     */
    public class Test {
        public static void main(String[] args) {
            IOperate game = new Game();
            IOperate mailList = new MailList();
    
            Brand nBrand = new NBrand(game);
            nBrand.operate();
    
            nBrand = new NBrand(mailList);
            nBrand.operate();
    
            Brand mBrand = new MBrand(game);
            mBrand.operate();
    
            mBrand = new MBrand(mailList);
            mBrand.operate();
        }
    }

    运行结果如下

    玩游戏
    看通讯录
    玩游戏
    看通讯录

    比较好理解,不过笔者认为我们在实际开发中,可能很多地方会用到桥接模式,只是大家都忘记这个模式,而用继承去实现。

    还是那句老话,理解其核心思想,拒绝生搬硬套。希望能帮助学习桥接模式的小伙伴。

  • 相关阅读:
    【UVA11324】 The Largest Clique (Tarjan+topsort/记忆化搜索)
    【洛谷2245】 星际导航 (最小瓶颈路)
    【UVA10816】Travel in Desert (最小瓶颈路+最短路)
    【洛谷 5002】专心OI
    炸金花【大模拟】
    【BZOJ1055】[HAOI2008]玩具取名(区间DP)
    【BZOJ1296】[SCOI2009]粉刷匠 (DP+背包)
    NOIP前的模板
    获取<考试>博文密码!o(*≧▽≦)ツ
    这是个萌新的萌新博客
  • 原文地址:https://www.cnblogs.com/zhuxiansheng/p/8059069.html
Copyright © 2011-2022 走看看