Java设计模式之——外观模式

前言

在简述外观模式前,先看个生活中的例子:

程序员小明到了结婚的年龄,但是由于程序员对于泡妹子这件事来说,咳咳,我相信大部分的程序员都是比较内向,并不是很擅长泡妹子,所以,有个媒人就给小明介绍了3个妹子,3个妹子都长的非常的漂亮,而且每个妹子都有自己擅长的技能,妹子A擅长“吹箫”,妹子B擅长“体操”,妹子C熟悉多种“语言”(你懂的),但是,相亲总得有个开始,小明经过长时间的和她们的“深入了解”,嗯,终于知道什么是“幸福了”,嘿嘿嘿~~

好,我相信大家都没看懂这个例子,我来说明下:

我们知道,妹子们都有自己擅长的技能,但是呢,小明并不是一开始就知道的,小明最初的也就是通过媒人去认识她们,然后经过长时间的了解,才慢慢知道她们的技能,假设,将妹子们当成模块,小明当成客户端,媒人则是他们之间的中介,客户端需要跟模块打交道,通过中介途径,我们就可以知道每个模块的业务功能,这种模式就是外观模式

外观模式下,模块和客户端之间并不是直接打交道的,而是通过一个统一的中介去间接的打交道,模块隐藏了复杂的业务逻辑,仅仅给客户端提供一个通道,通过这个通道就可以知道每个模块实现的是什么功能,这样,我们并不需要关心模块中的复杂的过程,仅仅只需要通过指定的通道就可以完成我们的功能

这是网上的一幅图

用途

外观模式的用途非常广泛,不仅是模块与类之间使用,连数据结构上也可以使用,现在分别来举两个例子

就以上述例子来举:

3个妹子对应的是3个不同的模块,分别是GirlA,GirlB,GirlC

public class GirlA {  
    //示意方法  
    public void skillA(){  
        System.out.println("女孩A所会的技能");  
    }  
}  
public class GirlB {  
    //示意方法  
    public void skillB(){  
        System.out.println("女孩B所会的技能");  
    }  
}  
public class GirlC {  
    //示意方法  
    public void skillC(){  
        System.out.println("女孩C所会的技能");  
    }  
}  

而媒人相当于中介,她负责介绍妹子给小明认识

public class   Intermediator {  
    //示意方法,满足客户端需要的功能  
    public void test(){  
        GirlA a = new GirlA();  
        a.skillA();  
        GirlB b = new GirlB();  
         b.skillB(); 
        GirlC c = new GirlC();  
        c.skillC(); 
    }  
}  

而小明则是通过中介认识的妹子

public class Client {  
  
    public static void main(String[] args) {  
          
        Intermediator intermediator = new Intermediator();  
        intermediator. test();  
    }  
  
}  

我们通过了中介来建立客户端和模块之间的通信,不仅简单,更利于维护,如果我们有n个客户端需要和模块打交道,没有了中介,那维护性和扩展性就会很差,如果某个模块有变动,我们就需要每个客户端都要修改,那得多麻烦

这就是类和模块之间的用途,现在我们来说说数据结构上的用法

假设,后台返回的数据类似这种

{
    bean1: {
        "id": "1",
        "name": "hello"
    },
    bean2: {
        "id": "2",
        "name": "hello"
    },
    bean3: {
        "id": "3",
        "name": "hello"
    }
}

如果不利用外观模式的话,每当我们需要用到里面的bean的时候,我们都需要去实例化,不仅浪费大量的代码,而且还不利于维护,如果要将他们放到List里面的时候,那就很头疼了,利用外观模式就简单点多了,我们只需要用一个BaseBean将他们存放起来,等用的时候之间就可以实力化拿出来了,看看怎么写:

Bean1

public class Bean1{
  public int id;
  public String name;
}

Bean2

public class Bean2{
  public int id;
  public String name;
}

Bean1

public class Bean3{
  public int id;
  public String name;
}

BaseBean

public class BaseBean{
  public Bean1 bean1;
  public Bean2 bean2;
  public Bean3 bean3;
}

而我们用的时候只需要实力化BaseBean,就可以拿出数据了,也只需要将BaseBean添加到List就可以


优点

讲述了这么多,相信它的优点显而易见了,总的来说有这么几点:

  • 降低偶尔性
    门面模式降低了客户端与模块的耦合度,让模块能更容易扩展和维护
  • 简单易维护
    我们不需要知道模块内部上实现逻辑,仅仅需要知道怎么用就可以了
  • 整洁
    通过上述的例子,它的整洁程度显然易见,编写过程很简单,不需要考虑太多
  • 统一性
    我们仅仅需要一个类就可以完成统一模块的调用,代码量很少

好了,到这外观模式就结束了~~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容