Java中的门面模式,一般来说他的用途是隐藏一些不希望用户看到的东西,比如方法,变量,并且这些变量是不能够设置成私有的,因为在系统内部有些地方需要调用。在Tomcat的HttpServletRequest和HttpServletResponse这两个对象中就使用了门面模式。举例:

有一个接口叫做Person,有eat()方法,有一个实现类Chinese中国人,中国人类里面还有run()方法,此系统还有一个类InnerSystem要调用Chinese中的name和run()方法,那么此时的name和run()方法就不能设置成私有,否则在InnerSystem中就调不到name和run()了。这是系统内部的活动。现在有一种情况出现了,既然InnerSystem的属性和方法设置成public,那么其他任何类都能够调用得到,但是我希望系统外部又不能调用而只希望系统内部能调用。此时门面模式就有用了。采用门面类ChineseFacade,他也实现了Person接口,并且把Chinese作为私有变量,让门面类来接待客人,门面类通过私有变量来与里面的对象打交道。此时用户只需要面对门面类,而里面的Chinese对象甚至都不用知道外面还有门面对象。很多人喜欢用医院看病的例子来讲门面模式,其实很形象,也可以用黄牛党买票来表述,当我们需要买张火车票的时候,去找个黄牛党,我们不用关黄牛党是怎么弄到手的,当然黄牛党到窗口去买票,售票员根本毋须关心是谁来买票,只要操作流程正确那么就可以卖票给他。写点代码来测试:

//Person接口:
public interface Person {
void eat();
}
//中国人类:
public class Chinese implements Person { String name; public void run() {
System.out.println("中国人走路");
} @Override
public void eat() {
System.out.println("中国人吃饭");
} }
//系统内部子系统,调用Chinese的任何公共方法和属性:
public class InnerSystem {
public void invokePerson() {
Chinese chinese = new Chinese();
chinese.name = "Jay";
chinese.run();
}
}
//中国人类的门面类,代替Chinese,相当于他的发言人:
public class ChineseFacade implements Person { private Chinese chinese; public ChineseFacade(Chinese chinese) {
this.chinese = chinese;
} @Override
public void eat() {
chinese.eat();
} }
public class Test {
public static void main(String[] args) {
//在系统外部,你根本调用不到系统想要隐藏的属性和方法,只能调用公开的
ChineseFacade cf = new ChineseFacade(new Chinese());
cf.eat();
}
}

Java 门面模式 浅析的更多相关文章

  1. Java门面模式(思维导图)

    图1 门面模式[点击查看图片] 1,实体对象类 package com.cnblogs.mufasa.demo1; //3个子系统,解决问题的实体 public class StoreA { //示意 ...

  2. Java门面模式(或外观模式)

    门面模式(或外观模式)隐藏系统的复杂性,并为客户端提供一个客户端可以访问系统的接口. 这种类型的设计模式属于结构模式,因为此模式为现有系统添加了一个接口以隐藏其复杂性.门面模式涉及一个类,它提供客户端 ...

  3. Java门面模式

    一.简介 隐藏系统的复杂性,对外提供统一的访问入口,外部系统访问只通过此暴露出的统一接口访问.是一种结构型模式.封装子系统接口的复杂性,提供统一的对外接口,能够使子系统更加简单的被使用. 二.结构及使 ...

  4. Java工厂模式浅析理解

    由于本人缺乏工作经验,本篇文章作为随笔,只是对工厂模式有一个简单的认识 工厂模式分为以下三种: 1:简单工厂(Simple Factory).2:工厂方法(Factory Method).3:抽象工厂 ...

  5. 重学 Java 设计模式:实战外观模式「基于SpringBoot开发门面模式中间件,统一控制接口白名单场景」

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 你感受到的容易,一定有人为你承担不容易 这句话更像是描述生活的,许许多多的磕磕绊绊总 ...

  6. JAVA设计模式之门面模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述门面(Facade)模式的: 门面模式是对象的结构模式,外部与一个子系统的通信必须通过一个统一的门面对象进行.门面模式提供一个高层次的接口 ...

  7. 《JAVA与模式》之门面模式

    <JAVA与模式>之门面模式 在阎宏博士的<JAVA与模式>一书中开头是这样描述门面(Facade)模式的: 门面模式是对象的结构模式,外部与一个子系统的通信必须通过一个统一的 ...

  8. JAVA设计模式——第 7 章 门面模式【Facade Pattern】(转)

    好,我们继续讲课.大家都是高智商的人,都写过纸质的信件吧,比如给女朋友写情书什么的,写信的过程大家都还记得吧,先写信的内容,然后写信封,然后把信放到信封中,封好,投递到信箱中进行邮递,这个过程还是比较 ...

  9. Java设计模式—门面模式(带案例分析)

    1.门面模式的定义: 门面模式(Facade Pattern)也叫做外观模式,是一种比较常用的封装模式,其定义如下:       要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行.门面模式 ...

随机推荐

  1. Android 关于ExpandableListView去掉里头的分割线

    关于ExpandableListView去掉里面的分割线关于ExpandableListView,自己写了个类继承自BaseExpandableListAdaptergroups,childs都弄好了 ...

  2. nginx学习

    nginx源码学习是一个痛苦又快乐的过程,下面列出了一些nginx的学习资源. 首先要做的当然是下载一份nginx源码,可以从nginx官方网站下载一份最新的. 看了nginx源码,发现这是一份完全没 ...

  3. [BS-21] 关于OC中对象与指针的思考

    关于OC中对象与指针的思考 1. 创建对象: OC中可通过代码Person *p = [[Person alloc] init];创建了一个对象p.该过程中内存情况为: 在当前线程的栈(默认1M)中, ...

  4. VMware ESXi 5.5创建虚拟机

    1.用鼠标右键单击连接到的IP地址,在弹出的快捷菜单中选择“新建虚拟机”选项,或者按“Ctrl+N”热键. 2.选择自定义 3.自定义服务器名称,并且名称最好是英文而且名称需要是唯一的. 4.选择本地 ...

  5. VC++ 修改资源页面语言

    选中 资源文件,在“属性”页面中更改 “language”选项: 资源视图中: 属性 页面中:

  6. swift NSUserDefaults的基本使用

    import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: ...

  7. CoreOS

    http://blog.sina.com.cn/s/blog_5c57b5190102v1f0.html

  8. CocoaPods看的三篇文章

    http://www.bubuko.com/infodetail-425274.html//有图片 http://www.cnblogs.com/jys509/p/4839803.html http: ...

  9. Leetcode: Remove K Digits

    Given a non-negative integer num represented as a string, remove k digits from the number so that th ...

  10. Splay!

    #include<cstdio> #include<cstdlib> ; ; ; int lim; struct SplayTree { . int sz[maxn]; . ] ...