Web中的积累:外观模式 Facade

  1. 云栖社区>
  2. 博客>
  3. 正文

Web中的积累:外观模式 Facade

bysocket 2016-04-28 17:15:09 浏览1413
展开阅读全文

壹 前言

目测好久没写文章了,距离上一篇文章也有二十多天。我是怎么了?哈哈~,两个字:生命。生命似乎说大了,那健康吧。吃一堑长一智吧

image

思考对生活 对生命

我的信仰?佛教?基督?…当你生病了,有药吃。比如感冒了感冒药你会觉得药难吃。人吗就是那样,但当你想到了,你生病了没药可吃是多么无奈。比如我 胸闷 胸疼。随之而来的是蹦波劳累,上海-温州-家里台州,各处跑。看病,啥?无病?no

那时候的自己想起乘车就怕,四肢无力。简直是注意力,精神都没了。看代码?看着java 想着是啥我都忘了。

 

后来医生药倒是没有,自己颓废着…也就是那次,那次开学初。我再次乘了害怕的动车去学校了。我相信自己会慢慢好的,不熬 夜,规律休息。第一个星期是最漫长的日子、听课无力,坐多了腰疼。shit!坚持…坚持…后来明显慢慢有力了。第二个星期,我开始锻炼,目前第三个星期 了,我坚持锻炼了六天。fuck my heath! i am coming , hope no so late。

image

 

贰 外观模式的接触

看源码是种享受,最近各种看。没事就看,有事就忙。我觉得贵在学习吧。哈哈~ 第一次看到了是这里:

image

 

正所谓,知之为知之,用到才算真。小朽不懂,就马上去百度了下这个Facade。得知是个模式,正好呀,学呗。说罢就查了视频看,查了人家的博客看。值得看何必不看呢。

 

外观模式(Facade)可以江一系列复杂的包封装成一个简单的封闭接口。也可以说,一个子系统的外部与其内部的通信必须通过一个统一的Facade对象进行。这里的通信的意思:彼此相互作用。它的作用提供了一个高层的接口,易于使用。

 

叁 外观模式的结构

Facade         为调用方定义简单的调用接口。
Clients          调用者。通过Facade接口调用提供某功能的内部类群。
Packages     功能提供者。指提供功能的类群(模块或子系统)

image

肆 外观模式小例子

现实中,八九十年代,没有基金的时候。国债,股票,期货…都是各自运行的。例如下面:

股票:

1
2
3
4
5
6
public class Gupiao {  
        
    public void mai() {  
        System.out.println("买股票");  
    }  

期货:

1
2
3
4
5
6
public class Qihuo {  
        
    public void chao() {  
        System.out.println("买期货");  
    }  

国债:

1
2
3
4
5
6
public class GuoZai {  
        
    public void mai() {  
        System.out.println("买国债");  
    }  

如果你想买国债,买期货,你会跟各自的系统打交道。new 其中一个对象进行操作。所以这会造成下面几点:

       1.耦合度增加

       2.无层次化,结构不分明

 

自从有了基金。什么是基金,按着外观模式的说法,就是你不知道有多少种股票或者啥,基金帮你打理这些小系统。它帮你安排了各种方案,比如

基金:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class JiJin {  
    private Gupiao gupiao;  
    private GuoZai guozai;  
    private Qihuo qihuo;  
        
    public JiJin() {  
        this.guozai = new GuoZai();  
        this.gupiao = new Gupiao();  
        this.qihuo = new Qihuo();  
    }  
        
    public void maiJijinA() {  
        this.guozai.mai();  
        this.gupiao.mai();  
    }  
        
    public void maiJijinB() {  
        this.guozai.mai();  
        this.gupiao.mai();  
        this.qihuo.chao();  
    }  

测试案例:

1
2
3
4
5
6
public class MainClass {  
    public static void main(String[] args) {  
        JiJin jijin = new JiJin();  
        jijin.maiJijinB();  
    }  

这样一来,其实用性就出来了:

  1.为一个复杂子系统提供一个简单接口。

  2.提高子系统的独立性。

  3.在层次化结构中,可以使用Facade模式定义系统中每一层的入口。

 

伍 思考在Web中

 

1  web三层构架,其实在数据访问层和业务逻辑层,业务逻辑层和表示层的层与层之间建立外观Facade模式应用,为复杂的子系统提供一个简单的接口或者抽象类,使得耦合大大降低。

2  在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂,大多数的模式使用时也都会产生很多很小的类,这本是好事,但也给外部调用它们的用户程序带来了使用上的困难,增加外观Facade可以提供一个简单的接口,减少它们之间的依赖。

    具体做法:将小类规划,分类。然后实现代理Facade。

3  在维护一个遗留的大型系统时,可能这个系统已经非常难以维护和扩展了,但因为它包含非常重要的功能,新的需求开发必须依赖于它。此时用外观模式 Facade也是非常合适的。例如可以开发一个外观Facade类,来提供设计粗糙或高度复杂的遗留代码的比较清晰简单的接口,让新系统与Facade对 象交互,Facade与遗留代码交互所有复杂的工作。

image

陆 感谢知识来源和小结

可以广泛用于WEB,项目架构。加油!!

参考资料:

google文章和自己的体会。

网友评论

登录后评论
0/500
评论
bysocket
+ 关注