zoukankan      html  css  js  c++  java
  • 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();
        }
    }
  • 相关阅读:
    systemverilog中堵塞和非堵塞事件以及同步
    Win 10最大的亮点不是免费而是人工智能
    STL源代码学习(vector篇)
    【金阳光測试】大话Android自己主动化測试--Android自己主动化系列(1)--金阳光于2013年4月份
    [PHP]怎样在SAE的CodeIgniter项目中隐藏掉index.php
    ubuntu 非长期支持版升级系统版本号(ssh登录情况适用)
    #26 Remove Duplicates from Sorted Array
    怎样建设内网网站
    scrollView and tableView
    关于Kingfisher--备用
  • 原文地址:https://www.cnblogs.com/dreamroute/p/3667446.html
Copyright © 2011-2022 走看看