设计模式-深入理解各种代理模式(2)通俗代码版
3》多代理模式:提高或增强代理的其他业务,如:拦截、过滤等
public interface IGamePlayer {
//登录游戏
public void login(String user,String password);
//杀怪,这是网络游戏的主要特色
public void killBoss();
//升级
public void upgrade();
}
---
public interface IProxy {
//计算费用
public void count();
}
---
public class GamePlayer implements IGamePlayer {
private String name = "";
//通过构造函数传递名称
public GamePlayer(String _name){
this.name = _name;
}
//打怪,最期望的就是杀老怪
public void killBoss() {
System.out.println(this.name + "在打怪!");
}
//进游戏之前你肯定要登录吧,这是一个必要条件
public void login(String user, String password) {
System.out.println("登录名为"+user + " 的用户 " + this.name + "登录成功!");
}
//升级,升级有很多方法,花钱买是一种,做任务也是一种
public void upgrade() {
System.out.println(this.name + " 又升了一级!");
}
}
---
public class GamePlayerProxy implements IGamePlayer,IProxy {
private IGamePlayer gamePlayer = null;
//通过构造函数传递要对谁进行代练
public GamePlayerProxy(IGamePlayer _gamePlayer){
this.gamePlayer = _gamePlayer;
}
//代练杀怪
public void killBoss() {
this.gamePlayer.killBoss();
}
//代练登录
public void login(String user, String password) {
this.gamePlayer.login(user, password);
}
//代练升级
public void upgrade() {
this.gamePlayer.upgrade();
this.count();
}
//计算费用
public void count(){
System.out.println("升级总费用是:150元");
}
}
---
public class Client {
public static void main(String[] args) {
//定义一个痴迷的玩家
IGamePlayer player = new GamePlayer("张三");
//然后再定义一个代练者
IGamePlayer proxy = new GamePlayerProxy(player);
//开始打游戏,记下时间戳
System.out.println("开始时间是:2009-8-25 10:45");
proxy.login("zhangSan", "password");
//开始杀怪
proxy.killBoss();
//升级
proxy.upgrade();
//记录结束游戏时间
System.out.println("结束时间是:2009-8-26 03:40");
}
}
4》虚拟代理:在每个方法前判断下真实主题(被代理对象)是否初始化,没有初始化 new 真实被代理对象即可
比如:
public class Client {
public static void main(String[] args) {
//定义一个痴迷的玩家
IGamePlayer player = null;
//然后再定义一个代练者
IGamePlayer proxy = new GamePlayerProxy(player);
// 必须在 GamePlayerProxy 构造方法类初始化player
//开始打游戏,记下时间戳
System.out.println("开始时间是:2009-8-25 10:45");
proxy.login("zhangSan", "password");
//开始杀怪
proxy.killBoss();
//升级
proxy.upgrade();
//记录结束游戏时间
System.out.println("结束时间是:2009-8-26 03:40");
}
}
----------------------------------
//通过构造函数传递要对谁进行代练
public GamePlayerProxy(IGamePlayer _gamePlayer){
if(_gamePlayer== null){
_gamePlayer=new GamePlayer("张三");
}
this.gamePlayer = _gamePlayer;
}
设计模式轻松学【十一】装饰模式 如果要扩展一些功能,我们可以采用装饰模式来实现。装饰者模式以对客户透明的方式动态地给一个对象附加上更多的责任。换言之,客户端并不会觉得对象在装饰前和装饰后有什么不同。装饰者模式可以在不使用创造更多子类的情况下,将对象的功能加以扩展。
设计模式学习——代理模式(1) 一、什么是代理模式 为其他对象提供一种代理以控制对这个对象的访问。其类图如下: Subject:抽象主题类,它既可以是抽象类也可以是接口类,是一个最普通的业务类型定义,无特殊要求。 RealSubject:具体主题类,被代理角色,是具体业务逻辑实现执行者。 Proxy:代理类,负责对具体主题的应用,
相关文章
- iOS设计模式之代理模式
- 设计模式(5)-己所不欲,施之于人(代理模式)
- RocketMQ 5.0:无状态代理模式的探索与实践
- 简介Python设计模式中的代理模式与模板方法模式编程
- 设计模式 -- 代理模式 (Proxy Pattern)
- C++设计模式9--代理模式--万能的中间层
- 模式之动态代理模式
- Proxy 代理模式 动态代理 cglib MD
- 设计模式之代理模式
- k8s service服务发现详解:ipvs代理模式、服务类型
- 熬夜学Java语言-设计模式之代理模式
- 设计模式-深入理解各种代理模式(1)通俗代码版
- C++设计模式:代理模式
- 带你认识4种设计模式:代理模式、装饰模式、外观模式和享元模式
- 设计模式——代理模式(C++实现)
- Python:设计模式之代理模式
- 设计模式【代理模式】
- Hadoop阅读笔记(七)——代理模式
- 大话设计模式C++版——代理模式
- 云计算设计模式(二十)——调度程序代理管理者模式
- DDOS工具合集---CC 2.0(僵尸网络proxy,单一url,可设置cookie,refer),传奇克星(代理+单一url,可设置cookie),NetBot_Attacker网络僵尸1.0(僵尸网络,HTTP NO-Cache Get攻击模式,CC攻击,HTTP空GET请求攻击),傀儡僵尸VIP1.4版(僵尸网络,动态单一url)、上兴网络僵尸2.3、中国制造网络僵尸、安全基地网络僵尸==
- 设计模式----代理模式
- Java代理模式:如何优雅地控制对象访问?
- 23种设计模式6:代理模式