设计模式-深入理解各种代理模式(2)通俗代码版

简介: 3》多代理模式:提高或增强代理的其他业务,如:拦截、过滤等 public interface IGamePlayer {//登录游戏public void login(String user,String password);//杀怪,这是网络游戏的主要特色public void killBoss();//升级public void upgrade(); } --- public

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;
}



目录
相关文章
|
26天前
|
设计模式 存储 Java
23种设计模式,备忘录模式的概念优缺点以及JAVA代码举例
【4月更文挑战第9天】备忘录模式是一种行为设计模式,它能在不破坏对象封装的前提下,捕获并保存对象的当前状态,以便后面可以恢复到这个状态。
26 0
|
10天前
|
设计模式 存储 Java
C++从入门到精通:3.5设计模式——提升代码可维护性与可扩展性的关键
C++从入门到精通:3.5设计模式——提升代码可维护性与可扩展性的关键
|
10天前
|
设计模式 Go 网络安全
[设计模式 Go实现] 结构型~代理模式
[设计模式 Go实现] 结构型~代理模式
|
25天前
|
设计模式 算法 Java
23种设计模式,访问者模式的概念优缺点以及JAVA代码举例
【4月更文挑战第10天】访问者模式是一种将算法与对象结构分离的设计模式。这种模式主要用于执行一个操作(或一组操作)在一个对象结构的各元素上,它可以在不修改各元素的类的前提下定义新的操作。
18 2
|
25天前
|
设计模式 算法 Java
23种设计模式,模板方法模式的概念优缺点以及JAVA代码举例
【4月更文挑战第10天】模板方法模式是一种行为设计模式,它定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些特定步骤。
17 0
|
25天前
|
设计模式 算法 搜索推荐
23种设计模式,策略模式的概念优缺点以及JAVA代码举例
【4月更文挑战第10天】设计模式是软件工程中的一种最佳实践指导,用于解决常见的设计问题。它们被分类为创建型、结构型和行为型模式。其中,策略模式是一种行为型设计模式,旨在定义一系列算法,封装每一个算法,并使它们可互换。策略模式允许算法独立于使用它们的客户端变化
20 1
|
25天前
|
设计模式 Java
23种设计模式,状态模式的概念优缺点以及JAVA代码举例
【4月更文挑战第9天】状态模式是一种行为设计模式,允许一个对象在其内部状态改变时改变它的行为,这个对象看起来似乎修改了它的类。
29 4
|
26天前
|
设计模式 Java
23种设计模式,观察者模式的概念优缺点以及JAVA代码举例
【4月更文挑战第9天】观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,使得当一个对象改变状态时,所有依赖于它的对象都会得到通知并自动更新。
24 2
|
27天前
|
设计模式 Java
23种设计模式,中介者模式的概念优缺点以及JAVA代码举例
【4月更文挑战第8天】中介者模式是一种行为设计模式,它通过一个中介对象来封装一系列对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
31 8
|
27天前
|
设计模式 Java
23种设计模式,迭代器模式的概念优缺点以及JAVA代码举例
【4月更文挑战第8天】迭代器模式是一种行为设计模式,它提供了一种方法来顺序访问一个聚合对象中的各个元素,而无需暴露该对象的内部表示。它主要用于遍历集合对象(如列表、树等)。
26 9