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.总结

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

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

  • 相关阅读:
    Java实现 LeetCode 792 自定义字符串排序(暴力)
    Java实现 LeetCode 792 自定义字符串排序(暴力)
    asp.net session对象的持久化
    Java实现 LeetCode 791 自定义字符串排序(桶排序)
    Java实现 LeetCode 791 自定义字符串排序(桶排序)
    Java实现 LeetCode 791 自定义字符串排序(桶排序)
    Java实现 LeetCode 790 多米诺和托米诺平铺(递推)
    Java实现 LeetCode 790 多米诺和托米诺平铺(递推)
    Java实现 LeetCode 790 多米诺和托米诺平铺(递推)
    小白也能看懂的约瑟夫环问题
  • 原文地址:https://www.cnblogs.com/zh1996/p/10354680.html
Copyright © 2011-2022 走看看