您的位置:首页 > 编程语言 > Java开发

java设计模式--外观模式

2014-04-11 11:50 246 查看
java设计模式--外观模式

java设计模式--外观模式

举例:

现在去某个政府部门办理一个营业执照,需要经历下面几道手续:

1.先去A部门盖章

2.再去B部门盖章

3.最后去C部门盖章

4.经历了这三道手续后一个营业执照就办理好了

下面不用设计模块的解决方案:

public class GovernmentA
{
public void dealWith()
{
System.out.println("部门A的章盖好了");
}
}


public class GovernmentB
{
public void dealWith()
{
System.out.println("部门B的章盖好了");
}
}


public class GovernmentC
{
public void dealWith()
{
System.out.println("部门C的章盖好了");
}
}


public class Client
{
public static void main(String[] args)
{
new GovernmentA().dealWith();
new GovernmentB().dealWith();
new GovernmentC().dealWith();
}
}


运行结果:

部门A的章盖好了
部门B的章盖好了
部门C的章盖好了


上面的实现方法有何问题:

客户端为了使用这个功能,需要与子系统内的多个模块交互。

这对于客户端而言,相当麻烦,使得客户端不能简单的使用系统功能,而且,如果

其中的某个模块方式了变化,还可能会引起客户端也要随着变化。

使用外观模式来解决上诉的问题:

外观模式的定义:

为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口

使得这一子系统更加容易使用。

public interface GovernmentAService
{
public void dealWith();
}


public class GovernmentAServiceImpl implements GovernmentAService
{
@Override
public void dealWith()
{
System.out.println("部门A的章盖好了....");
}
}


public interface GovernmentBService
{
public void dealWith();
}


public class GovernmentBServiceImpl implements GovernmentBService
{
@Override
public void dealWith()
{
System.out.println("部门B的章盖好了...");
}
}


public interface GovernmentCService
{
public void dealWith();
}


public class GovernmentCServiceImpl implements GovernmentCService
{
@Override
public void dealWith()
{
System.out.println("部门C章已经盖好了...");
}
}


/**
* 功能:
*         外观对象
* @author Administrator
*
*/
public class Facade
{
public void deailWith()
{
GovernmentAService a = new GovernmentAServiceImpl();
a.dealWith();

GovernmentBService b = new GovernmentBServiceImpl();
b.dealWith();

GovernmentCService c = new GovernmentCServiceImpl();
c.dealWith();
}
}


public class Client
{
public static void main(String[] args)
{
new Facade().deailWith();
}
}


运行结果:

部门A的章盖好了....
部门B的章盖好了...
部门C章已经盖好了...


外观模式的目的:

外观模式的目的不是给予子系统添加新的功能接口,而是为了让外部减少与子系统内多个模块的交互,松散耦合,

从而让外部能够更简单地使用子系统。

使用外观模式和不使用外观模式相比有何变化?

看到Facade的实现,可能有人说,这不就是把原来的客户端的代码搬到Facade里面吗?没有什么变化?

但是实质上是发生了变化,因为Facade是位于部门A,B,C模块组成的系统这边,那么它就相当于屏蔽了外部客户端和系统内部模块的将会,

从而把部门A,B,C模块组合成为一个整体对外,不但方便了客户端的调用,而且封装了系统内部的细节功能。

外观模式的本质是:封装交互,简化调用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: