java设计模式--外观模式
2014-04-11 11:50
218 查看
java设计模式--外观模式
java设计模式--外观模式
举例:
现在去某个政府部门办理一个营业执照,需要经历下面几道手续:
1.先去A部门盖章
2.再去B部门盖章
3.最后去C部门盖章
4.经历了这三道手续后一个营业执照就办理好了
下面不用设计模块的解决方案:
运行结果:
上面的实现方法有何问题:
客户端为了使用这个功能,需要与子系统内的多个模块交互。
这对于客户端而言,相当麻烦,使得客户端不能简单的使用系统功能,而且,如果
其中的某个模块方式了变化,还可能会引起客户端也要随着变化。
使用外观模式来解决上诉的问题:
外观模式的定义:
为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口
使得这一子系统更加容易使用。
运行结果:
外观模式的目的:
外观模式的目的不是给予子系统添加新的功能接口,而是为了让外部减少与子系统内多个模块的交互,松散耦合,
从而让外部能够更简单地使用子系统。
使用外观模式和不使用外观模式相比有何变化?
看到Facade的实现,可能有人说,这不就是把原来的客户端的代码搬到Facade里面吗?没有什么变化?
但是实质上是发生了变化,因为Facade是位于部门A,B,C模块组成的系统这边,那么它就相当于屏蔽了外部客户端和系统内部模块的将会,
从而把部门A,B,C模块组合成为一个整体对外,不但方便了客户端的调用,而且封装了系统内部的细节功能。
外观模式的本质是:封装交互,简化调用。
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模块组合成为一个整体对外,不但方便了客户端的调用,而且封装了系统内部的细节功能。
外观模式的本质是:封装交互,简化调用。
相关文章推荐
- Java 设计模式——外观模式
- Java设计模式---外观模式
- Java设计模式——外观模式
- JAVA设计模式之门面模式(外观模式)
- java设计模式之外观模式
- Java设计模式之--外观模式(facade pattern)
- java-设计模式(结构型)-【外观模式】
- 【Java设计模式12】——外观模式
- java设计模式之外观模式
- Java设计模式----外观模式(Facade)
- Java设计模式笔记之外观模式
- java设计模式之外观模式Facade
- JAVA 设计模式 外观模式
- Java开发中的23种设计模式详解----外观模式(Facade)
- java设计模式之外观模式(门面模式)
- Java设计模式——外观模式
- JAVA设计模式之门面模式(外观模式)
- java设计模式之外观模式
- Java 设计模式_外观模式
- java设计模式(工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式、适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式,。 行为型模式,共十一种:策略模式、模板方法)