Java 门面模式 浅析
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 门面模式 浅析的更多相关文章
- Java门面模式(思维导图)
图1 门面模式[点击查看图片] 1,实体对象类 package com.cnblogs.mufasa.demo1; //3个子系统,解决问题的实体 public class StoreA { //示意 ...
- Java门面模式(或外观模式)
门面模式(或外观模式)隐藏系统的复杂性,并为客户端提供一个客户端可以访问系统的接口. 这种类型的设计模式属于结构模式,因为此模式为现有系统添加了一个接口以隐藏其复杂性.门面模式涉及一个类,它提供客户端 ...
- Java门面模式
一.简介 隐藏系统的复杂性,对外提供统一的访问入口,外部系统访问只通过此暴露出的统一接口访问.是一种结构型模式.封装子系统接口的复杂性,提供统一的对外接口,能够使子系统更加简单的被使用. 二.结构及使 ...
- Java工厂模式浅析理解
由于本人缺乏工作经验,本篇文章作为随笔,只是对工厂模式有一个简单的认识 工厂模式分为以下三种: 1:简单工厂(Simple Factory).2:工厂方法(Factory Method).3:抽象工厂 ...
- 重学 Java 设计模式:实战外观模式「基于SpringBoot开发门面模式中间件,统一控制接口白名单场景」
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 你感受到的容易,一定有人为你承担不容易 这句话更像是描述生活的,许许多多的磕磕绊绊总 ...
- JAVA设计模式之门面模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述门面(Facade)模式的: 门面模式是对象的结构模式,外部与一个子系统的通信必须通过一个统一的门面对象进行.门面模式提供一个高层次的接口 ...
- 《JAVA与模式》之门面模式
<JAVA与模式>之门面模式 在阎宏博士的<JAVA与模式>一书中开头是这样描述门面(Facade)模式的: 门面模式是对象的结构模式,外部与一个子系统的通信必须通过一个统一的 ...
- JAVA设计模式——第 7 章 门面模式【Facade Pattern】(转)
好,我们继续讲课.大家都是高智商的人,都写过纸质的信件吧,比如给女朋友写情书什么的,写信的过程大家都还记得吧,先写信的内容,然后写信封,然后把信放到信封中,封好,投递到信箱中进行邮递,这个过程还是比较 ...
- Java设计模式—门面模式(带案例分析)
1.门面模式的定义: 门面模式(Facade Pattern)也叫做外观模式,是一种比较常用的封装模式,其定义如下: 要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行.门面模式 ...
随机推荐
- python or not python
python or not python 我挺喜欢 python 这种编程语言,它本身的丰富的动态特性让这种语言的表达能力很强,基本上 python 上写的一行代码,可实现 java 上 1.5 到 ...
- PHP如何解决网站大流量与高并发的问题
首先,确认服务器硬件是否足够支持当前的流量. 普通的P4服务器一般最多能支持每天10万独立IP,如果访问量比这个还要大, 那么必须首先配置一台更高性能的专用服务器才能解决问题 ,否则怎么优化都不可能彻 ...
- 发送xml或json格式的数据给服务器
后台通过context.Request.InputStream来接收 #region 发送消息 + void SendMessage() /// <summary> /// 发送消息 // ...
- oracle 时间格式修改
1.临时修改时间格式第一种方式 :select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;第二种方式:alter session set n ...
- throw 子句
throws是声明方法时抛出可能出现的异常,但不能捕获异常,也就是说并不直接处理异常,而是把它向上传递.其格式如下: 方法声明 throws 异常类名列表 若一个方法声明抛出异常,则表示该方法可能会抛 ...
- ThinkPHP分页链接支持数组参数的办法
这几天在用ThinkPHP做系统,搜索页有个数组参数提交 <input class="params_t" name="t[]" type="ch ...
- Excel公式无法重算,暂无法解决
一份复杂的excel报表,某些单元格是用求和公式算出来的值,但生成之后,用excel打开,无法显示公式结果,按F9也没有用,只能在单元格公式双击后回车才会显示.而在WPS2010按F9就可以重算,WP ...
- Angular.js 学习笔记
AngularJS 通过新的属性和表达式扩展了 HTML. AngularJS 可以构建一个单一页面应用程序. <!-- ng-app 指令定义一个 AngularJS 应用程序. ng-mod ...
- MAXFLOAT
CGSizeMake(300, MAXFLOAT),是计算宽和高的,里面的MAXFLOAT通俗点说就是最大的数值,代表你的label的宽和高是随着你label内容而变化,不用担心因为label内容过长 ...
- [原创]java WEB学习笔记63:Struts2学习之路--表单标签 用户注册模块
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...