当前位置: 首页 > news >正文

设计模式8:代理模式-静态代理

我尝试在JDK、Android SDK和一些出名的库中,寻找静态代理的源码,没能找到。如果有读者发现,欢迎评论或者私信我。

本文目录

  • 静态代理的实例
      • 1. 售票代理
      • 2. 明星代理

静态代理的实例

1. 售票代理

售票服务

public interface TicketService {  //售票  public void sellTicket();  //问询  public void inquire();  //退票  public void withdraw();  
}

站点售票

public class Station implements TicketService {  @Override  public void sellTicket() {  System.out.println("\n\t售票.....\n");  }  @Override  public void inquire() {  System.out.println("\n\t问询。。。。\n");  }  @Override  public void withdraw() {  System.out.println("\n\t退票......\n");  }  }

代理网点售票

public class StationProxy implements TicketService {  private Station station;  public StationProxy(Station station){  this.station = station;  }  @Override  public void sellTicket() {  // 1.做真正业务前,提示信息  this.showAlertInfo("××××您正在使用车票代售点进行购票,每张票将会收取5元手续费!××××");  // 2.调用真实业务逻辑  station.sellTicket();  // 3.后处理  this.takeHandlingFee();  this.showAlertInfo("××××欢迎您的光临,再见!××××\n");  }  @Override  public void inquire() {  // 1.做真正业务前,提示信息  this.showAlertInfo("××××欢迎光临本代售点,问询服务不会收取任何费用,本问询信息仅供参考,具体信息以车站真实数据为准!××××");  // 2.调用真实逻辑  station.inquire();  // 3。后处理  this.showAlertInfo("××××欢迎您的光临,再见!××××\n");  }  @Override  public void withdraw() {  // 1.真正业务前处理  this.showAlertInfo("××××欢迎光临本代售点,退票除了扣除票额的20%外,本代理处额外加收2元手续费!××××");  // 2.调用真正业务逻辑  station.withdraw();  // 3.后处理  this.takeHandlingFee();  }  /* * 展示额外信息 */  private void showAlertInfo(String info) {  System.out.println(info);  }  /* * 收取手续费 */  private void takeHandlingFee() {  System.out.println("收取手续费,打印发票。。。。。\n");  }  }

2. 明星代理

public interface IStar {public abstract void sing(double money);
}public class StarImpl implements IStar {public void sing(double money) {System.out.println("唱歌,收入" + money + "元");}
}//经纪人
public class StarProxy implements IStar {private StarImpl star = new StarImpl();public void sing(double money) {System.out.println("请先预约时间");System.out.println("沟通出场费用");if (money < 100000) {System.out.println("对不起,出场费10w万以内不受理");return;}System.out.println("经纪人抽取了" + money * 0.2 + "元代理费用");star.sing(money * 0.8);}
}//测试
public class ProxyDemo {public static void main(String[] args) {StarProxy sg = new StarProxy();sg.sing(200000);}
}
http://www.lryc.cn/news/132823.html

相关文章:

  • 运动耳机哪款好用、适合运动的耳机推荐
  • 页面滑动到可视区域加载更多内容思维流程
  • Java Word转PDF(直接转和以图片形式转)、PDF转图片、图片转PDF
  • dockerfile编写LNMP
  • websocket + stomp + sockjs学习
  • ApplicationListener , @EventListener 和 CommandLineRunner 启动顺序验证
  • 网络编程基础(1)
  • Linux驱动开发(Day4)
  • LVS负载均衡群集部署(LVS-NAT模型实例)
  • 【仿写tomcat】五、响应静态资源(访问html页面)、路由支持以及多线程改进
  • stm32单片机/51单片机蜂鸣器不响(proteus模拟)
  • BERT、ERNIE、Grover、XLNet、GPT、MASS、UniLM、ELECTRA、RoBERTa、T5、C4
  • 主机防护的重要性和方式
  • 聚观早报 | 抢先体验阿维塔11座舱;本田和讴歌采用NACS充电标准
  • 思科计算机网络答案(包含第1~11章节)
  • 所见即所得,「Paraverse平行云」助力万间打造智能建造新图景
  • AI图片处理功能演示
  • CentOS系统环境搭建(六)——使用docker-compose安装redis
  • 个人论坛项目测试报告
  • 一起来学shiny把(4)—调控控件进行输出
  • VBIC卡管理系统设计与实现
  • 八种架构演进
  • 商城-学习整理-高级-分布式事务(十九)
  • Java学习笔记(三):面向对象
  • 电商项目part02 电商后台多数据源
  • 【C# 基础精讲】LINQ 基础
  • ChatGPT成为工作工具,具体都应用在哪些地方?
  • Shader学习(三)(片元着色器)
  • 谷歌推出首款量子弹性 FIDO2 安全密钥
  • 前端常用的三种加密方式(MD5、base64、sha.js)