好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

深入理解Java设计模式之外观模式

一、什么是外观模式

定义 :为子系统中的一组接口提供一个一致的界面,用来访问子系统中的一群接口。

外观模式组成:

Facade :负责子系统的的封装调用

Subsystem Classes :具体的子系统,实现由外观模式Facade对象来调用的具体任务

二、外观模式的使用场景

1、设计初期阶段,应该有意识的将不同层分离,层与层之间建立外观模式;

2、开发阶段,子系统越来越复杂,增加外观模式提供一个简单的调用接口;

3、维护一个大型遗留系统的时候,可能这个系统已经非常难以维护和扩展,但又包含非常重要的功能,为其开发一个外观类,以便新系统与其交互。

三、外观模式的优缺点

优点:

1、实现了子系统与客户端之间的松耦合关系;
2、客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易。

缺点:

1、不符合开闭原则,如果要修改某一个子系统的功能,通常外观类也要一起修改;

2、没有办法直接阻止外部不通过外观类访问子系统的功能,因为子系统类中的功能必须是公开的(根据需要决定是否使用internal访问级别可解决这个缺点,但外观类需要和子系统类在同一个程序集内)。

四、外观模式的实现

先写出四个子系统的类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

class SubSystemOne

{

     public void MethodOne()

     {

         Console.WriteLine( "子系统方法一" );

     }

}

class SubSystemTwo

{

     public void MethodTwo()

     {

         Console.WriteLine( "子系统方法二" );

     }

}

class SubSystemThree

{

     public void MethodThree()

     {

         Console.WriteLine( "子系统方法三" );

     }

}

class SubSystemFour

{

     public void MethodFour()

     {

         Console.WriteLine( "子系统犯法四" );

     }

}

引入外观类,减少子系统类之间的交互

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

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( "\n方法组合A()---" );

         one.MethodOne();

         two.MethodTwo();

         four.MethodFour();

     }

     public void MethodB()

     {

         Console.WriteLine( "\n方法组B()---" );

         two.MethodTwo();

         three.MethodThree();

     }

}

客户端代码:

?

1

2

3

4

5

6

7

static void Main(string[] args)

{

     Facade facade = new Facade();

     facade.MethodA();

     facade.MethodB();

     Console.Read();

}

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注的更多内容!

原文链接:https://www.cnblogs.com/xuwendong/p/10414861.html

查看更多关于深入理解Java设计模式之外观模式的详细内容...

  阅读:13次