<八>阅读<<大话设计模式>>该模型的外观

简介:

        Facade模式其实很好理解,被表面的东西展示海报。内部的东西,你不知道(因为我们有一个好包)。例如,外部和公司内部制度,5交互系统,此5互。那么第一种就是外部系统和5个系统都进行交互;另外一种就是做一个接口将外部系统须要的逻辑封装成一个方法,该方法中包括了关于5个系统的交互方式,这样外部系统就不用直接和5个系统交互了,直接调用接口完事。外观模式也叫门面模式。事实上说白了就是把要用的东西封装起来使交互更加方便。

       外观模式定义:为子系统中的一组接口提供一个一致的界面。此模式定义了一个高层接口。这个接口使得这一子系统更加easy使用。

       <<大话设计模式>>在这章节中以买股票为故事情节展开的,说买股票须要学习非常多知识,一个不懂股票的人买会吃亏,所以不如买基金,基金是有职业经理人去操作,用外观模式来说的话,职业经理人就是门面,关于钱怎样进行投资自己不关心,自己关心的是挣钱了没有。

差点儿相同理解了外观模式了。小二。该上代码了。

1、系统1和2,就是client不关心与系统1、2交互

public class SubSystemOne {

 

   public void method(){

      System.out.println("这是系统1");

   }

}

public class SubSystemTwo {

 

   public void method(){

      System.out.println("这是系统2");

   }

}

2外观类,将client要交互的系统逻辑封装

public class Facade {

 

   SubSystemOne one;

   SubSystemTwo two;

  

   public Facade(){

      one = new SubSystemOne();

      two = new SubSystemTwo();

   }

   //要处理的逻辑,将外部系统与onetwo系统交互的逻辑放这里,外部系统就不用和onetwo交互了,直接与外观类交互

   public void method(){

      one.method();

      two.method();

   }

}

3、client

public class FacadeClient {

 

   /**

    * @param args

    */

   public static void main(String[] args) {

      // TODO Auto-generatedmethod stub

 

      //直接与外观类交互,在此看不到onetwo系统

      Facade facade = new Facade();

      facade.method();

   }

 

}

        看到client直接和门面类Façade交互就OK了,根本不知道系统1、2类的存在。这就是传说中的外观模式。没用过不知道,学习了感觉也就那样

附上模式结构图


总结:对于复杂难以维护的老系统,直接去改或去扩展都可能产生非常多的问题,那么我们假设去开法一个Façade与老系统的交互,那么以后直接开发新系统调用这个接口就能够了。这就是外观模式,一低调而美丽的人……

 

 

版权声明:本文博客原创文章,博客,未经同意,不得转载。






本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/4712811.html,如需转载请自行联系原作者


相关文章
|
9月前
|
算法 Java 程序员
Python专家解读垃圾回收&lt;&lt;二&gt;&gt;
Python专家解读垃圾回收&lt;&lt;二&gt;&gt;
Python专家解读垃圾回收&lt;&lt;二&gt;&gt;
|
9月前
|
算法 Java Python
Python专家解读垃圾回收&lt;&lt;三&gt;&gt;
Python专家解读垃圾回收&lt;&lt;三&gt;&gt;
Python专家解读垃圾回收&lt;&lt;三&gt;&gt;
|
JavaScript 前端开发 Windows
&lt;精通JavaScript&gt;---阅读笔记01
&lt;精通JavaScript&gt;---阅读笔记01
97 0
&lt;精通JavaScript&gt;---阅读笔记01
|
Java 数据格式 XML
&lt;xliff:g&gt;标签
转自:http://blog.csdn.net/huangyabin001/article/details/37651165 摘要: 这是Android4.3Mms源码中的strings.xml的一段代码: %1$smessages per conversation 在这里google的工程师们使用了标签,这个标签主要在动态插入内容时候使用,有点类似于占位符的作用。
940 0
|
分布式计算 数据库 Spark
Spark的这些事&lt;二&gt;——几个概念
1、SparkContext [经常简称为 sc] spark app 的起点和入口,一般用来加载数据集,生成第一个 rdd。 2、定义一个 spark 应用程序所需要的三大步骤的逻辑:加载数据集,处理数据,结果展示。 加载数据集 加载数据集,这里的数据集大概分为两组: - 一种是不变的,静态数据集,大多数场景都是从数据库,文件系统上面加载进来
1357 0
实现string类的操作符重载 + = &gt; &lt; == != &gt;&gt; &lt;&lt;
<pre code_snippet_id="596931" snippet_file_name="blog_20150203_1_6205569" name="code" class="objc">//MyString.h #pragma once #include &lt;iostream&gt; using namespace std; class MyString { priva
1356 0
gtd阅读笔记1
自然式计划模式的5个步骤: 1 定义目标和原则 2 展望成果(前景展望) 3 集思广益(发散思考) 4 组织管理 5 明确下一步的行动方案 GTD: 行动前的思考和策划具有关键性的作用,能够让你不再忙乱
816 0