全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

java设计模式—静态代理模式(聚合与继承方式对比)

一、概述

1.目标:要在Tank的move()方法做时间代理及日志代理(可以设想以后还要增加很多代理处理),且代理间的顺序可活更换

2.思路:

(1)聚合:代理类聚合了被代理类,且代理类及被代理类都实现了movable接口,则可实现灵活多变,具体看代码

(2)继承:继承不够灵活,随着功能需求增多,继承体系会非常臃肿。具体看代码

二、代码

1.Movable.java

2.Tank.java

3.TankTimeProxy.java

4.TankLogProxy.java

5.Tank2Time.java

6.Tank3Log.java

7.Client.java

1.Movable.java

 public interface Movable {
  public void move();
 }

2.Tank.java

import java.util.Random;

public class Tank implements Movable {

 @Override
 public void move() {
  System.out.println("Tank moving.......");
  try {
   Thread.sleep(new Random().nextInt(5000));
  } catch (InterruptedException e) {
   e.printStackTrace();
  }
 }

}

3.TankTimeProxy.java

public class TankTimeProxy implements Movable {

 Movable m;
 
 public TankTimeProxy(Movable m) {
  this.m = m;
 }

 @Override
 public void move() {
  System.out.println("Time Proxy start...........");
  long start = System.currentTimeMillis();
  m.move();
  long end = System.currentTimeMillis();
  System.out.println("花费时间:"+(end - start));
  System.out.println("Time Proxy end...........");
 }

}

4.TankLogProxy.java

public class TankLogProxy implements Movable {

 Movable m;
 
 public TankLogProxy(Movable m) {
  this.m = m;
 }

 @Override
 public void move() {
  System.out.println("Log Proxy start...........");
  m.move();
  System.out.println("Log Proxy end...........");
 }

}

5.Tank2Time.java

public class Tank2Time extends Tank {

 public void move(){
  System.out.println("Tank2 time start...........");
  long start = System.currentTimeMillis();
  super.move();
  long end = System.currentTimeMillis();
  System.out.println("花费时间:"+(end - start));
  System.out.println("Tank2 time end...........");
 }
}

6.Tank3Log.java

public class Tank3Log extends Tank2Time {

 public void move(){
  System.out.println("Tank3Log start...........");
  super.move();
  System.out.println("Tank3Log end...........");
 }
}

7.Client.java

public class Client {

 @Test
 public void testProxy(){
  
  Tank t = new Tank();
  Movable m;
  
  //一、聚合的方式(较灵活,因为实现了接口)
  //1.1聚合方式的代理,先日志代理,后时间代理
  TankTimeProxy ttp1 = new TankTimeProxy(t);
  TankLogProxy tlp1 = new TankLogProxy(ttp1);
  
  m = tlp1;
  m.move();
  
  System.out.println("\n==============================分隔线==========================\n");
  
  //1.2聚合方式的代理,先时间代理,后日志代理(可以灵活切换顺序)
  TankLogProxy tlp2 = new TankLogProxy(t);
  TankTimeProxy ttp2 = new TankTimeProxy(tlp2);
  
  m = ttp2;
  m.move();
  
  System.out.println("\n==============================分隔线==========================\n");
  
  //二、继承的方式
  //2.1代理时间
  Tank2Time t2 = new Tank2Time();
  t2.move();
  
  System.out.println("\n==============================分隔线==========================\n");
  
  //2.2先代理日志,后时间,不能灵活切换
  Tank3Log t3 = new Tank3Log();
  t3.move(); 
 }
}

三、运行结果

因为每个代理都实现了同一movable接口,代理和被代理对象之间都可以相互灵活转换,以实现代理功能之间的灵活叠加组合。

以上这篇java设计模式—静态代理模式(聚合与继承方式对比)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# java静态代理模式  # 详解JAVA设计模式之代理模式  # Java设计模式之动态代理模式实例分析  # Java设计模式之静态代理模式实例分析  # 23种设计模式(7) java代理模式  # java设计模式笔记之代理模式  # java设计模式学习之代理模式  # java设计模式-代理模式(实例讲解)  # Java设计模式之代理模式与装饰模式实例详解  # Java设计模式之代理模式_动力节点Java学院整理  # java设计模式之代理模式(Porxy)详解  # 详解设计模式中的proxy代理模式及在Java程序中的实现  # Java使用设计模式中的代理模式构建项目的实例展示  # 实例讲解Java设计模式编程中如何运用代理模式  # Java设计模式之代理模式(Proxy模式)介绍  # Java通俗易懂系列设计模式之代理模式  # 实现了  # 给大家  # 分隔线  # 要在  # 希望能  # 这篇  # 则可  # 小编  # 大家多多  # pre  # Tank2Time  # background  # Client  # Tank3Log  # util  # import  # implements  # Random  # void  # brush 


相关文章: 如何用狗爹虚拟主机快速搭建网站?  杭州银行网站设计制作流程,杭州银行怎么开通认证方式?  如何快速搭建高效简练网站?  西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?  独立制作一个网站多少钱,建立网站需要花多少钱?  如何用AWS免费套餐快速搭建高效网站?  如何用IIS7快速搭建并优化网站站点?  建站之星logo尺寸如何设置最合适?  建站之星后台密码遗忘或太弱?如何重置与强化?  香港服务器网站推广:SEO优化与外贸独立站搭建策略  三星网站视频制作教程下载,三星w23网页如何全屏?  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  深圳网站制作案例,网页的相关名词有哪些?  山东网站制作公司有哪些,山东大源集团官网?  定制建站如何定义?其核心优势是什么?  建站之星安装后如何配置SEO及设计样式?  微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?  如何选择适合PHP云建站的开源框架?  ,怎么用自己头像做动态表情包?  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  ,网页ppt怎么弄成自己的ppt?  如何用腾讯建站主机快速创建免费网站?  免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?  安云自助建站系统如何快速提升SEO排名?  C++用Dijkstra(迪杰斯特拉)算法求最短路径  佛山企业网站制作公司有哪些,沟通100网上服务官网?  如何获取上海专业网站定制建站电话?  如何设置并定期更换建站之星安全管理员密码?  北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?  c# await 一个已经完成的Task会发生什么  建站三合一如何选?哪家性价比更高?  如何在阿里云完成域名注册与建站?  如何在腾讯云服务器上快速搭建个人网站?  如何打造高效商业网站?建站目的决定转化率  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  如何在云主机快速搭建网站站点?  如何快速搭建高效服务器建站系统?  h5在线制作网站电脑版下载,h5网页制作软件?  制作公司内部网站有哪些,内网如何建网站?  如何用虚拟主机快速搭建网站?详细步骤解析  外贸公司网站制作哪家好,maersk船公司官网?  常州企业建站如何选择最佳模板?  如何高效配置香港服务器实现快速建站?  建站DNS解析失败?如何正确配置域名服务器?  北京网站制作的公司有哪些,北京白云观官方网站?  制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?  php条件判断怎么写_ifelse和switchcase的使用区别【对比】  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  如何规划企业建站流程的关键步骤? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。