小王是一个普通公司职员实习生, 收入平平却又爱攀比.
最近爱疯(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. 总结
代理模式, 没什么好总结的.
倒是给尚未踏入社会的年轻人 (虽然我也是年轻人....) 一些忠告: 我不反对网贷, 但请认清自己的还款能力.
来源: https://www.cnblogs.com/zh1996/p/10354680.html