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

    小王是一个普通公司职员实习生,收入平平却又爱攀比。

    最近爱疯(iPhone)8又上市了,小王虚荣心泛滥,想搞一个肾8。

    没钱怎么办呢?

    小王上网了解到了一个贷款平台,小王很快在这个平台上贷到了8000块钱,

    美滋滋的买了肾8,在朋友面前神气的很....

    可是好景不长,还款日到了!!!

    鉴于小王长时间不归还,贷款公司将收款业务委托给一家外包催收公司。

    1.服务接口IService

    服务接口没啥好说的,里面就是一个方法,要钱collect()。

    贷款公司要钱,要不到交给催收公司,

    催收公司接着要。

    老赖也需要面对,各路人马要钱collect()时,在collect()方法种,说明自己的情况。

    因此,贷款公司、催收公司、老赖都要继承这个接口。

    /**
     * @author 博客园-刷书小将
     *
     */
    public interface IService {
        //催收
        public void collect();
        
    }

    2.贷款公司Company登场

    public class Company implements IService {
    
        @Override
        public void collect() {
            // TODO Auto-generated method stub
            System.out.println("贷款公司:面对老赖,我要将业务交给催收公司");
            
            System.out.println("------------------------------------");
            
            //定义催收公司
            CollectCompany collectCompany = new CollectCompany();
            
            //催收公司要钱
            collectCompany.collect();
        }
    
    }

    其实贷款公司,就是委托人。

    当有人逾期时,就将要钱的工作collect(),但是贷款公司软磨硬泡,老赖就是不还钱,贷款公司最终交给催收公司(代理)来处理。

    3.催收公司CollectCompany登场

    public class CollectCompany implements IService {
    
        private IService user;
    
        public CollectCompany() {
            //催收公司(代理)找到催收对象....
            this.user = new User();//此处应该是已经确定好的对象,代理的对象是不能改变的,此处有别于装饰模式
        }
    
        @Override
        public void collect() {
            // TODO Auto-generated method stub
            
            System.out.println("催收公司员工:我收到了用户的反馈:");
            
            user.collect();//了解老赖反馈
            
            System.out.println("------------------------------------");
            
            System.out.println("催收公司:先将消息传到给委托人贷款公司.....");
            System.out.println("催收公司:然后再给逾期用户下达最后通缉令");
            
            System.out.println("------------------------------------");
            
            //催收公司给逾期用户下通缉令...
            System.out.println("我是xxx催收公司,");
            System.out.println("受xxx贷款公司委托,");
            System.out.println("请于今天xxx点前立刻还款,逾时我们将登门拜访");
        }
    
    }

    催收公司,也就是代理。

    重要的一步,它要了解到老赖为何逾期。也就是代理对象user的collect()方法。

    然后催收公司可以做其他的业务,例如

    1,向委托人(贷款公司)报告老赖逾期的原因

    2,恐吓老赖,继续催收要钱collect()。。

    看到这里,这个催收公司,是不是就是一个,明显的代理?

    4.老赖User登场

    public class User implements IService {
    
        @Override
        public void collect() {
            // TODO Auto-generated method stub
            System.out.println("我是用户,我没钱还款了");
        }
    
    }

    5.实现

    public class Main {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    
            //定义贷款公司,并要钱
            Company company = new Company();
            company.collect();
        }
    
    }

    运行截图如下:

    6.与装饰模式比较

    我之前,写了一篇博客:装饰模式 - 女屌丝逆袭白富美案例

    装饰模式看似与代理模式挺类似的,具体差异在哪呢?

    在对象。

    装饰模式,每装饰一次,就会产生一个新的不同的对象。

    代理模式,是对某一指定对象,进行代理,而不会改变此对象,当然,也不会产生新的对象。

    7.总结

    代理模式,没什么好总结的。

    倒是给尚未踏入社会的年轻人(虽然我也是年轻人....)一些忠告:我不反对网贷,但请认清自己的还款能力。

  • 相关阅读:
    控制台程序添加滚轮滑动支持
    【SpringCloud】Eureka注册中心(二)
    【SpringCloud】快速入门(一)
    【SpringBoot】SpringBoot 之RestTemplate的使用
    【Application】Docker 安装 Redis(七)
    【Application】Docker 安装 MySQL(六)
    【Application】Docker DockerFile解析(五)
    【Application】Docker 容器数据卷(四)
    【Application】Docker 常用命令(三)
    【Application】Docker 基本使用(二)
  • 原文地址:https://www.cnblogs.com/zh1996/p/10354680.html
Copyright © 2011-2022 走看看