博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 门面模式 浅析
阅读量:6406 次
发布时间:2019-06-23

本文共 1610 字,大约阅读时间需要 5 分钟。

  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();    }}

 

转载于:https://www.cnblogs.com/dreamroute/p/3667446.html

你可能感兴趣的文章
原创:vsphere概念深入系列四:Nic Teaming若干问题
查看>>
Encapsulating Data 数据封装
查看>>
编程之美 海量数据寻找 K 大数
查看>>
优化网页图片
查看>>
python正则表达式 小例几则
查看>>
数据库脏读、不可重复读、幻象读
查看>>
iOS开发之检查更新
查看>>
[Voice communications] 声音的滤波
查看>>
vs2010中如何编写C语言程序
查看>>
NYOJ 38布线问题
查看>>
C#一个FTP操作封装类FTPHelper
查看>>
苹果IOS开发者账号总结--发布应用APP时team name是否可以随意写?
查看>>
jQuery新的事件绑定机制on()
查看>>
mysql 增加删除用户
查看>>
IE 火狐浏览器对时间格式的兼容性;使用原型对象的方式 prototype关键字;时间格式化...
查看>>
boa + ajax + cgi ajax请求cgi
查看>>
Java NIO、NIO.2学习笔记
查看>>
SQLServer Note
查看>>
TortoiseSVN使用简介
查看>>
python获取两个dict的不同
查看>>