首页 联系我 返回顶部
定义:
提供一个统一的接口去访问多个子系统的多个不同的接口。外观模式定义了一个高层次的接口,使得子系统更容易被使用。

UML示意图
photo

外观类
1、知道哪些子系统,知道处理哪些请求
2、将客户的请求传递给子系统处理

子系统类
1、实现了子系统的功能
2、处理由外观类传过来的任务
3、子系统无需知道外观类,在任何地方也没有引用外观类。

现实中的例子:
  我们去餐厅吃饭,只需将菜单传递给服务员即可。服务员就是这里的外观类,服务员会将请求传递给厨房里的厨师、传菜工等服务生。
以下代码取自DoFactory
using System;

namespace DoFactory.GangOfFour.Facade.Structural
{

//客户端调用

  class MainApp
  {
    public static void Main()
    {
      Facade facade = new Facade();

      facade.MethodA();
      facade.MethodB();
      Console.Read();
    }
  }

  // 子系统1

  class SubSystemOne
  {
    public void MethodOne()
    {
      Console.WriteLine(" SubSystemOne Method");
    }
  }

  // 子系统2

  class SubSystemTwo
  {
    public void MethodTwo()
    {
      Console.WriteLine(" SubSystemTwo Method");
    }
  }

  // 子系统3

  class SubSystemThree
  {
    public void MethodThree()
    {
      Console.WriteLine(" SubSystemThree Method");
    }
  }

  // 子系统4

  class SubSystemFour
  {
    public void MethodFour()
    {
      Console.WriteLine(" SubSystemFour Method");
    }
  }

  // 外观类

  class Facade
  {
    //外观类知道它要处理哪些子系统
    SubSystemOne one;
    SubSystemTwo two;
    SubSystemThree three;
    SubSystemFour four;

    public Facade()
    {
      one = new SubSystemOne();
      two = new SubSystemTwo();
      three = new SubSystemThree();
      four = new SubSystemFour();
    }
    //外观类中某些方法会委托给子系统去执行
    public void MethodA()
    {
      Console.WriteLine("\nMethodA() ---- ");
      one.MethodOne();
      two.MethodTwo();
      four.MethodFour();
    }

    public void MethodB()
    {
      Console.WriteLine("\nMethodB() ---- ");
      two.MethodTwo();
      three.MethodThree();
    }
  }
} 

外观模式提供了一个简单的公有接口去处理复杂的子系统,并且没有减少子系统的功能。
它避免了客户端直接去同复杂的子系统去直接交互。
当然,如果你需要高级的功能,也可直接去调用子系统。

对于外观模式,head first中的例子就特别有代表性。

相关文章

3 Responses

收起评论
  1. 彩虹之旅 五月 27 2008 , 02:35 #1
    彩虹之旅
    来学习一下,什么时候我的水平才能上去呢?
  2. 爱婚纱 五月 27 2008 , 11:30 #2
    爱婚纱
    呵呵 跟着幻想曲的blog 学习一两年 偶的.NET虽然实战不行 至少也能夸夸其谈了...

    观千剑而后识器 是不是这个意思啊???0
  3. 幻想曲 五月 27 2008 , 11:55 #3
    幻想曲
    难道大家都没发现增加了配色功能么

Write a comment:



(将显示你的Gravatar图标)  



[b][/b] - [i][/i] - [u][/u]- [quote][/quote]

:-/ ^_^ :d :o :kiss: :) :p :se: [yeah] :( :love: :han: :up: :cry: :zzz: o_o

暂时停止交换链接.

评论提交有问题?