一、概述

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小时内与您取得联系。