【设计模式与体系结构】代理模式


文章目录

  • 【设计模式与体系结构】代理模式
    • 一.实例分析
    • 二.代码实现
    • 三.实现结果

一.实例分析

(1) 代理模式设计一个房产中介的模拟程序。
要求:房产中介有介绍和代售南昌万科房子的权利,以及登记购房者信息权利。这里的房产中介是代理者,南昌万科是真实主题。
(2) 按照以上要求设计类图和编写Java源程序。

首先分析实例中的三个角色:

  • 抽象角色:通过接口或抽象类声明真实角色实现的业务方法。
  • 代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。
  • 真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。

很明显,在这个业务场景里面,购房是我们需要实现的业务方法,而房子是南昌万科提供的,购房者不是直接找南昌万科而是去找房产中介购房。

由此可得:

  • 抽象角色:买房
  • 真实角色:南昌万科
  • 代理角色:房产中介

二.代码实现

其实这里我写的是租房,影响不大,意思到了就行。

//租房为抽象对象
public interface Rent {void rent();
}
//南昌万科为真实角色
public class WKHost {private String houseName;private String houseMoney;public WKHost(String houseName, String houseMoney) {this.houseName = houseName;this.houseMoney = houseMoney;}public String getHouseName() {return houseName;}public void setHouseName(String houseName) {this.houseName = houseName;}public String getHouseMoney() {return houseMoney;}public void setHouseMoney(String houseMoney) {this.houseMoney = houseMoney;}//万科出租房子public void Rent(){System.out.println("南昌万科出租"+houseName+"的房子,租金"+houseMoney);}
}
//中介为代理角色
public class Agent implements Rent{//拥有房子代购的权力WKHost WKhost;//代理可以获取用户信息Client client;public Agent(WKHost WKhost,Client client) {this.WKhost = WKhost;this.client=client;}@Overridepublic void rent() {//中介带用户看房lookHost(client);//南昌万科出租该房子WKhost.Rent();//中介收取客户费用getMoney(client,WKhost);}//中介带用户看房public void lookHost(Client client) {System.out.println("代理给"+client.getClientMessage()+"看房");}//中介收取客户费用private void getMoney(Client client, WKHost wKhost) {System.out.println("向"+client.getClientMessage()+"收取房子名字为"+WKhost.getHouseName()+"租金为"+WKhost.getHouseMoney()+"的房子费用,并收取了租金!");}
}
//用户即客户类
public class Client {//用户的个人信息,用名字代称private String clientMessage;public Client(String clientMessage) {this.clientMessage = clientMessage;}public String getClientMessage() {return clientMessage;}public void setClientMessage(String clientMessage) {this.clientMessage = clientMessage;}public static void main(String[] args) {//南昌万科出租房子WKHost host=new WKHost("2002","2000");//用户找提供自己的信息给代理来租房Agent agent=new Agent(host,new Client("李华"));//代理提供服务agent.rent();}
}

三.实现结果


好家伙,快写完才发现,代理类的getMoney()方法改成

private void getMoney(Client client, WKHost wKhost) {System.out.println("向"+client.getClientMessage()+"收取名字为"+WKhost.getHouseName()+"租金为"+WKhost.getHouseMoney()+"的房子费用,并从中收取了中介费!");}

更恰当一点。

最后,大家如果觉得这篇文章有用的话,可以点赞支持一下

【设计模式与体系结构】代理模式相关推荐

  1. 设计模式学习之代理模式学习(一)

    设计模式学习之代理模式学习(一) 关于设计模式想必学习过Java语言的人都知道吧,当时对其进行深入学习的的人应该不是很多.在我看来设计方面的知识相比于框架应用配置等知识要有意思的多,并且设计模式的对一 ...

  2. 设计模式之静态代理模式实战

    转载自 设计模式之静态代理模式实战 静态代理模式很简单,代理类和实现类都实现相同的接口,然后通过代理类来调用实现类的方法. 如我们想保存用户信息之前打印用户信息,或者保存用户信息之后把这些信息缓存下来 ...

  3. 设计模式之蝉——代理模式上中

    代理模式的扩展 1 普通代理 :这种代理就是客户端只能访问代理角色,而不能访问真实角色.与设计模式之蝉--代理模式上 片基本差不多. (1)Subject抽象主题角色: (2)RealSubject具 ...

  4. 每日一个设计模式之【代理模式】

    文章目录 每日一个设计模式之[代理模式] ☁️前言

  5. 大话设计模式C++版——代理模式

        本篇開始前先发个福利,程杰的<大话设计模式>一书高清电子版(带文件夹)已上传至CSDN,免积分下载. 下载地址:http://download.csdn.net/detail/gu ...

  6. Java24种设计模式(第二种)--代理模式(Proxy Pattern)

    Java24种设计模式 (第二种) 一.代理模式(Proxy Pattern) 模式逻辑: 什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道 被代理人能做哪些事 ...

  7. 23种java设计模式详解-代理模式

    什么是代理模式: Proxy模式又叫做代理模式,是构造型的设计模式之一,它可以为其他对象提供一种代理(Proxy)以控制对这个对象的访问.所谓代理,是指具有与代理元(被代理的对象)具有相同的接口的类, ...

  8. 设计模式:4.代理模式

    代理模式 代理模式属于结构型模式 定义:为其他对象提供一种代理以控制对这个对象的访问 代理模式就是在操作原对象的时候,多出来一个代理类,用来对原对象的访问进行控制和替代原对象进行一些操作 模式类图 角 ...

  9. 《设计模式系列》- 代理模式

    有情怀,有干货,微信搜索[三太子敖丙]关注这个有一点点东西的程序员. 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点.资料以及我的系列文 ...

  10. 【C++设计模式】-03代理模式

    代理模式 代理模式介绍 今天继续学习设计模式,今天我们来学习代理模式.其实这个模式呢在我们的生活早已经运用起来了.笔者看到这个模式就联想到了代理商.我们客户买东西一般都是经过代理商的,代理商和真正的生 ...

最新文章

  1. 图解 wp WordPress 文章 链接 在新窗口打开
  2. 第一课 第四节 数据转换
  3. Cuckoo Hashing的应用及性能优化
  4. html5+css3网页制作:三栏布局宽度自适应,css三栏布局的五种写法,中间自适应,左右宽度固定...
  5. 七、排序(4)——qsort()
  6. HashMap 死循环
  7. Velocity.js中文文档
  8. MySQL各个版本区别
  9. 飞鸽传书 v2.51 Build 320 多国语言版
  10. Linux-Ubuntu安装 MySQL
  11. 伸展树(splay tree)
  12. 2022年除了深度学习,人工智能算法有可能突破的10个方向
  13. 搭建自己的聊天室平台、公司内部聊天平台,Rocket.Chat搭建及使用
  14. 多家知名企业笔试面试精华
  15. 『这辈子就相爱《何苦要等下辈子》 李草青青、肖玄MV』
  16. CF 614 C Peter and Snow Blower (海伦公式、n个顶点绕圆扫过的最大面积)
  17. 【cartographer without ros】四、里程计odom数据转换
  18. salesforce 定时任务遇到的坑
  19. 【transformer】航空发动机寿命预测
  20. RestSharp 使用(含超时处理)

热门文章

  1. 论文笔记:Attention is All You Need
  2. 16个实用的.htaccess设置
  3. 从不赚钱到赚钱,最需要的改变是什么? | 赚钱游戏
  4. 在windows中用java执行DOS命令arp -a获取已知MAC对应的ip地址
  5. 前端面试题 HTML、CSS、JS、Vue、Es6
  6. 【PAT甲】A1019
  7. [Azure Function]替代YQL service
  8. python练手经典100例项目-推荐 10 个有趣的 Python 练手项目
  9. [NOIP2018 普及组] 摆渡车题解
  10. 人工智能体系架构(入门必看)