更新时间:2022-06-13 01:13:29
索引
为子系统中的一组接口提供一个一致的界面,Facade 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
Provide a unified interface to a set of interfaces in a subsystem. Facade defines a higher-level interface that makes the subsystem easier to use.
Facade
Subsystem Classes
在以下情况下可以使用 Facade 模式:
实现方式(一):用抽象类定义 Facade 而使子类对应于不同的子系统。
将一个系统划分成若干个子系统有利于降低系统的复杂性。一个常见的设计目标是使子系统间的通信和相互依赖关系达到最小。
大多数模式使用时都会产生更多更小的类。这使得子系统更具可重用性,也更容易对子系统进行定制,但这也给那些不需要定制子系统的用户带来一些使用上的困难。
Facade 可以提供一个简单的缺省视图,这一视图对于大多数用户来说已经足够,而那些需要更多的可定制性的用户可以越过 Facade 层。
用抽象类实现 Facade 而它的具体子类对应于不同的子系统实现,这可以进一步降低客户与子系统的耦合度。
1 namespace FacadePattern.Implementation1 2 { 3 public abstract class Facade 4 { 5 public abstract void Operation(); 6 } 7 8 public class ConcreteFacade : Facade 9 { 10 public override void Operation() 11 { 12 // we could use any factory here 13 // or use IoC here 14 SubsystemClassA subsystemClassA = new SubsystemClassA(); 15 SubsystemClassB subsystemClassB = new SubsystemClassB(); 16 17 subsystemClassA.BehaviorA(); 18 subsystemClassB.BehaviorB(); 19 } 20 } 21 22 public class SubsystemClassA 23 { 24 public void BehaviorA() 25 { 26 // do something 27 } 28 } 29 30 public class SubsystemClassB 31 { 32 public void BehaviorB() 33 { 34 // do something 35 } 36 } 37 38 public class Client 39 { 40 public void TestCase1() 41 { 42 Facade facade = new ConcreteFacade(); 43 facade.Operation(); 44 } 45 } 46 }