桥接模式-组装的艺术

或许,已经使用过桥接模式的设计思想,只是,你可能不知道它叫“桥接模式”而已。


我们学习设计模式,并不一定要生搬硬套到我们的代码架构中,而设计模式背后的思想,才是真正的精髓。正如本文所讲的桥接模式,听起来很陌生,就算不陌生,也不像平时常用的单例、工厂、适配、代理模式频繁出现,但是,桥接模式的设计思想其实很简单,说不定你平时在写代码过程中,就已经悄悄用上了。


但是,桥接模式也难,它难在概念的理解上,如果是根据概念去思考分析某一个功能场景是否可设计为桥接模式,那么 ,理解起来就稍微费劲一点,但桥接模式的实现是很简单的,一起分析讨论下下面一个功能需求场景。


用手机主题来说,一套完整的主题,主要涵盖以下几个要素:

图标、字体、壁纸、息屏


我们平时在使用手机主题时,可以以一整套主题为单位来切换,也可以在已有的多套主题当中,混合选取不同的主题要素,比如应用主题A的字体,主题B的图标,主题C的壁纸和息屏,又或者是单独下载某一个元素,单独应用上这个元素和其他元素进行搭配。


从这个功能使用体验来看,它的设计是很灵活的,可任由用户随意搭配。那么,如果从代码实现的角度来看,该如何实现呢?


首先,设计大于实现,先看一下设计结构图:

bridge_struct1

这个架构图其实很简单,为了更好的扩展和更灵活的设计和搭配,我们把主题和主题的四大元素都做一个抽象,然后每一个主题、每一个主题元素都是由外部实现。


由于主题做了抽象,所以我们的手机主题商店里头,出现了各种各样的主题;又由于主题元素(字体、图标、壁纸、息屏)做了抽象,所以主题商店里又有各种各样的主题元素,用户也能根据自己的喜欢,进行混搭。


如果你是代码设计小白,还是云里雾里,我们直接看代码好了。


#抽象主题

public abstract class Theme {
   
    // 主题ID
    private Long themeId;
    // 主题名字
    private String themeName;

    private Font font;
    private Icon icon;
    private Wallpaper wallpaper;
    private AOD aod;

    public Theme(Long themeId, String themeName,
                 Font font, Icon icon, Wallpaper wallpaper, AOD aod) {
   
        this.themeId = themeId;
        this.themeName = themeName;
        this.font = font;
        this.icon = icon;
        this.wallpaper = wallpaper;
        this.aod = aod;
    }

    public void show() {
   
        System.out.println("主题名:" + themeName);

        System.out.println("字体名:" + font.getEleName());
        System.out.println("图标
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yeqiu1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值