zoukankan      html  css  js  c++  java
  • Facade Pattern简单随笔

             Facade模式注重的是简化接口,为一个复杂子系统提供一个简单接口。 Facade Pattern:简化客户程序与子系统之间的交互接口,将复杂系统的内部子系统与客户程序之间的依赖解耦。 

             Facade模式定义了一个高层接口,为子系统中的一组接口提供一个一致的界面,这个接口使得这一子系统更加容易使用。

             Facade模式对客户屏蔽了子系统组件,因而减少了客户处理的对象的数目并使得子系统使用起来更加方便。Facade模式实现了子系统与客户之间的松耦合关系,而子系统内部的功能组件往往是紧耦合的。松耦合关系使得子系统的组件变化不会影响到它的客户。

    对于操作A,B,C而言,如果仅仅通过客户端来操作数据对象,将生成A,B,C相应的对象(完全由客户自己创建),比较繁琐。

    通过将操作A,B,C的操作隐藏到FacadeOperater类中进行相应的操作,提供给客户端的就仅仅是一个方法而已,简单,方便,易于维护。

    也就是说将A,B,C的操作集成到FacadeOperater类中。

    A,B,C代码如下:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Text;
     4 
     5 namespace FacadePatternSam
     6 {
     7     public class OperaterA
     8     {
     9         private bool result = false;
    10         //判断用户的名字长度是否大于5
    11         public bool VerufyName(ClientData obj) 
    12         {
    13             if (obj.Name.Length > 5)
    14             {
    15                 result = true;
    16             }
    17             else 
    18             {
    19                 Console.WriteLine("name length is  lesser than 5!");
    20             }
    21            return result;
    22         }
    23     }
    24 }
    25 
    26 
    27 using System;
    28 using System.Collections.Generic;
    29 using System.Text;
    30 
    31 namespace FacadePatternSam
    32 {
    33     public class OperaterB
    34     {
    35         private bool result = false;
    36         public bool VerifyAge(ClientData obj)
    37         {
    38             if (obj.Age > 50)
    39             {
    40                 result = true;
    41             }
    42             else
    43             {
    44                 Console.WriteLine("age is smaller than 50!");
    45             }
    46             return result;
    47         }
    48     }
    49 }
    50 
    51 
    52 using System;
    53 using System.Collections.Generic;
    54 using System.Text;
    55 
    56 namespace FacadePatternSam
    57 {
    58     public class OperaterC
    59     {
    60         private bool result = false;
    61         public bool VerifyNumber(ClientData obj)
    62         {
    63             if (obj.Number > 60)
    64             {
    65                 result = true;
    66             }
    67             else
    68             {
    69                 Console.WriteLine("number is smaller than 60");
    70 
    71             }
    72             return result;
    73         }
    74     }
    75 }
    76 

    将这3个类的操作集成;

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Text;
     4 
     5 namespace FacadePatternSam
     6 {
     7     public class FacadeOperater
     8     {
     9         private bool result = false;
    10         OperaterA a = new OperaterA();
    11         OperaterB b = new OperaterB();
    12         OperaterC c = new OperaterC();
    13         
    14         public bool VerifyAll(ClientData obj)
    15         {
    16             if (a.VerufyName(obj) && b.VerifyAge(obj) && c.VerifyNumber(obj))
    17             {
    18                 result = true;
    19                 Console.WriteLine("operater  is ok !!");
    20             }
    21             else 
    22             {
    23                 Console.WriteLine("please do again!It is not rigjt for your  operation!");
    24             
    25             }
    26             return result;
    27         }
    28     }
    29 }
    30 

    操作数据为:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Text;
     4 
     5 namespace FacadePatternSam
     6 {
     7     public class ClientData
     8     {
     9         private string _name;
    10         private float _age;
    11         private float _number;
    12         public ClientData(string name, float age,float number)
    13         {
    14             this._age = age;
    15             this._name = name;
    16             this._number = number;
    17 
    18         }
    19         public string Name
    20         {
    21             get
    22             {
    23                 return _name;
    24             }
    25         }
    26 
    27         public float Age
    28         {
    29             get
    30             {
    31                 return _age;
    32             }
    33         }
    34 
    35         public float Number
    36         {
    37             get 
    38             {
    39                 return _number;
    40             }
    41         
    42         }
    43     }
    44 }
    45 

    客户端代码:一种是没外观模式的  一种为用这种模式的,当然 这个例子比较简单,代码量差不多

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Text;
     4 
     5 namespace FacadePatternSam
     6 {
     7     class Program
     8     {
     9         static void Main(string[] args)
    10         {
    11             //基本操作
    12              ClientData clientObj = new ClientData("AAAAAA",60,70);
    13              OperaterA a = new OperaterA();
    14              OperaterB b = new OperaterB();
    15              OperaterC c = new OperaterC();
    16              if (a.VerufyName(clientObj) && b.VerifyAge(clientObj) && c.VerifyNumber(clientObj))
    17              {
    18                  Console.WriteLine("it  is  ok !!!");
    19              }
    20              else 
    21              {
    22                  Console.WriteLine("not  pass!!");
    23              }
    24              Console.WriteLine();
    25              Console.ReadLine();
    26             
    27             //外观模式操作
    28             FacadeOperater oper = new FacadeOperater();
    29             ClientData obj = new ClientData("yyyyyyyyyyy"5060);
    30             if (oper.VerifyAll(obj))
    31             {
    32                 Console.WriteLine("OK");
    33             }
    34             else
    35             {
    36                 Console.WriteLine("not pass!");
    37             }
    38             Console.ReadLine();
    39         }
    40     }
    41 }
    42 

    显示结果如下所示:

    ******************************************************************************

    源代码下载:/Files/jasenkin/FacadePatternSam.rar

  • 相关阅读:
    SqlBulkCopy实现大容量数据快速插入数据库中
    防查询语句注入漏洞攻击
    wpf中数据绑定(Datacontext)的应用
    WPF中StackPanel的使用方法
    可空类型的使用《二》
    关于可空数据类型的介绍
    C# 之泛型详解
    C# 之String以及浅拷贝与深拷贝
    C# 小软件部分(二)
    MVC 之HTML辅助方法
  • 原文地址:https://www.cnblogs.com/jasenkin/p/1686591.html
Copyright © 2011-2022 走看看