zoukankan      html  css  js  c++  java
  • 静态代理模式

    如果小A要结婚,那么他就需要做布置结婚现场,与新娘结婚,最后收拾现场。


    如果使用静态代理模式解决思路:如果小A要结婚,可以找一个婚庆公司,婚庆公司的职责就是负责布置结婚现场,和最后的收拾现场,而小A就只要负责结婚。


    从这两段话中,我们可以看出,小A和婚庆公司的目的都是为了结婚而做事情,那么在Java我们就一个把结婚这个事情定义成一个接口,小A和婚庆公司都有完成结婚这个事情。婚庆公司完成结婚现场布置,和最后收拾线程,而小A只负责和新娘结婚。
    在静态代理中,有了接口,我们还需要一个真实角色和代理角色。结婚既然接口,那么小A固然就是一个真实角色,而婚庆公司就是一个代理角色,因为真正结婚的是小A,而完成结婚之外的事情,比如现场布置的是婚庆公司。也就是说代理角色是为真正角色服务的,所以,在代理角色中,我们需要有一个真正角色的引用。

    那么我们首先创建一个接口

    Static Proxy:

    /**
     * @description: 静态代理的接口
     * @author: TateLiao
     * @Date: 2019/2/28
     */
    public interface StaticProxy {
    
        void marriage();
    
    }
     

    真实角色:小A

    /**
     * @description: 真实角色
     * @author: TateLiao
     * @Date: 2019/2/28
     */
    public class AUser implements StaticProxy{
        @Override
        public void marriage() {
            System.out.println("小A正在结婚");
        }
    }
     

    代理角色:婚庆公司

    /**
     * @description: 代理角色
     * @author: TateLiao
     * @Date: 2019/2/28
     */
    public class Company implements StaticProxy {
    
        private AUser aUser;
    
        public Company(AUser aUser) {
            this.aUser = aUser;
        }
    
        private void before() {
            System.out.println("布置现场!");
        }
    
        private void after() {
            System.out.println("收拾现场!");
        }
    
        @Override
        public void marriage() {
            before();
            //小A结婚
            aUser.marriage();
            after();
        }
    }
     

    最后测试一下

    /**
     * @description: 测试静态代理模式
     * @author: TateLiao
     * @Date: 2019/2/28
     */
    public class Test {
        public static void main(String[] args) {
            //小A对象
            AUser aUser = new AUser();
            //婚庆公司对象
            Company company = new Company(aUser);
            //执行结婚对象
            company.marriage();
        }
    }
     

    执行结果:

    布置现场!
    小A正在结婚
    收拾现场!
  • 相关阅读:
    vuejs2从入门到精通视频教程
    vuejs2项目开发实战视频教程
    vuejs2从入门到精通视频教程
    Bootstrap视频教程
    开通博卡拉
    阿里云Ubuntu 16 FTP安装配置注意事项
    [解决方法] Java-Class.forName() 反射/映射子类 并转化为父类/接口
    [HTML/CSS] ul元素居中处理
    [HTML/Javascript] JS判断IE浏览器各版本
    [HTML/JS] JQuery 页面滚动回到顶部
  • 原文地址:https://www.cnblogs.com/min-yu/p/10904874.html
Copyright © 2011-2022 走看看