1》普通代理模式(有益于扩展开发),对代理者进行封装真实角色
public interface IGamePlayer {
//登录游戏
public void login(String user,String password);
//杀怪,这是网络游戏的主要特色
public void killBoss();
//升级
public void upgrade();
}
---
public class GamePlayer implements IGamePlayer {
private String name = "";
//构造函数限制谁能创建对象,并同时传递姓名
public GamePlayer(IGamePlayer _gamePlayer,String _name) throws Exception{
if(_gamePlayer == null ){
throw new Exception("不能创建真是角色!");
}else{
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 {
private IGamePlayer gamePlayer = null;
//通过构造函数传递要对谁进行代练,封装代理者
public GamePlayerProxy(String name){
try {
gamePlayer = new GamePlayer(this,name);
} catch (Exception e) {
// TODO 异常处理
}
}
//代练杀怪
public void killBoss() {
this.gamePlayer.killBoss();
}
//代练登录
public void login(String user, String password) {
this.gamePlayer.login(user, password);
}
//代练升级
public void upgrade() {
this.gamePlayer.upgrade();
}
}
-------
public class Client {
public static void main(String[] args) {
//然后再定义一个代练者
IGamePlayer proxy = new GamePlayerProxy("张三");
//开始打游戏,记下时间戳
System.out.println("开始时间是:2009-8-25 10:45");
proxy.login("zhangSan", "password");
//开始杀怪
proxy.killBoss();
//升级
proxy.upgrade();
//记录结束游戏时间
System.out.println("结束时间是:2009-8-26 03:40");
}
}
2》强制代理模式:真实角色找指定代理
public interface IGamePlayer {
//登录游戏
public void login(String user,String password);
//杀怪,这是网络游戏的主要特色
public void killBoss();
//升级
public void upgrade();
//每个人都可以找一下自己的代理
public IGamePlayer getProxy();
}
----
public class GamePlayer implements IGamePlayer {
private String name = "";
//我的代理是谁
private IGamePlayer proxy = null;
public GamePlayer(String _name){
this.name = _name;
}
//找到自己的代理
public IGamePlayer getProxy(){
this.proxy = new GamePlayerProxy(this);
return this.proxy;
}
//打怪,最期望的就是杀老怪
public void killBoss() {
if(this.isProxy()){
System.out.println(this.name + "在打怪!");
}else{
System.out.println("请使用指定的代理访问");
}
}
//进游戏之前你肯定要登录吧,这是一个必要条件
public void login(String user, String password) {
if(this.isProxy()){
System.out.println("登录名为"+user + " 的用户 " + this.name + "登录成功!");
}else{
System.out.println("请使用指定的代理访问");;
}
}
//升级,升级有很多方法,花钱买是一种,做任务也是一种
public void upgrade() {
if(this.isProxy()){
System.out.println(this.name + " 又升了一级!");
}else{
System.out.println("请使用指定的代理访问");
}
}
//校验是否是代理访问
private boolean isProxy(){
if(this.proxy == null){
return false;
}else{
return true;
}
}
}
----
public class GamePlayerProxy implements IGamePlayer {
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();
}
//代理的代理暂时还没有,就是自己
public IGamePlayer getProxy(){
return this;
}
}
----
public class Client {
public static void main(String[] args) {
IGamePlayer proxy=null;
//定义个游戏的角色
IGamePlayer player = new GamePlayer("张三");
//真实角色
//proxy=player;
//新建一个代理者
//proxy = new GamePlayerProxy(player);
//获得指定的代理(代理自己指定的代理)
proxy = player.getProxy();//真实角色找到指定代理
System.out.println(">>>"+proxy);
//System.out.println(proxy);
//开始打游戏,记下时间戳
System.out.println("开始时间是:2009-8-25 10:45");
proxy.login("zhangSan", "password");
//开始杀怪
proxy.killBoss();
//升级
proxy.upgrade();
//记录结束游戏时间
System.out.println("结束时间是:2009-8-26 03:40");
}
}
分享到:
相关推荐
通过这个"通俗易懂版"的学习资源,你将能够深入理解每种设计模式的原理,掌握如何在实际项目中应用它们,提升代码的可维护性和复用性。阅读《设计模式_20090916.pdf》文档,结合具体的代码示例,相信你将能够更好地...
这个压缩包文件名为"23种设计模式-简单通俗的代码解释",表明它包含了一个全面的23个经典设计模式的代码实现,这些模式都是为了提高代码的健壮性和可扩展性。下面将对这23种设计模式进行详细阐述: 1. **单例模式**...
《深入浅出设计模式(中文版)》是一本专注于介绍软件设计模式的书籍。书中以通俗易懂的方式对设计模式进行了深入讲解,并且通过实例演示如何在编程实践中运用这些模式来解决实际问题。本书内容涵盖了多种设计模式的...
《深入浅出设计模式》是一本深受欢迎的程序员必读之作,它以其通俗易懂的语言,为读者揭示了编程世界中的复杂问题,并提供了解决之道。设计模式是软件工程领域中的一种最佳实践,是对在特定上下文中反复出现的问题...
设计模式是软件工程中的一种最佳实践,它是在特定情境下为了解决常见问题而形成的可重用解决方案...阅读这份PDF文档,开发者不仅能深入理解这些设计模式,还能学习到如何将它们有效地应用到实际项目中,提升编程水平。
本文将对书中提及的部分设计模式进行深入浅出的解读,帮助读者更好地理解和掌握这些模式。 #### 第1章:策略模式(Strategy Pattern) **策略模式**是一种行为型设计模式,它定义了一系列算法,并将每一个算法封装...
《Head.First设计模式》是软件开发领域中一本非常受欢迎的书籍,它以通俗易懂的方式讲解了设计模式这一复杂的主题。在22到39章节中,作者深入浅出地探讨了多个关键的设计模式,这些模式对于使用C#进行软件开发的...
本资源提供了23种设计模式的Java实现,通过具体的代码示例帮助开发者深入理解并掌握这些模式。 1. **单例模式(Singleton)**:确保一个类只有一个实例,并提供全局访问点。防止多线程环境下多个实例的产生,常用于...
这本书,名为《设计模式》的中文版,深入浅出地讲解了设计模式的基本理念及其在实际开发中的应用。设计模式并不是具体的代码或库,而是一种通用的、经过验证的、在不同场合可以复用的设计思想。 1. **单例模式**:...
《深入浅出设计模式》是一本深受欢迎的设计模式教程,其特点是用通俗易懂的语言讲解了设计模式的核心理念,使得初学者也能迅速理解和掌握这些模式。设计模式是软件工程中的重要概念,它代表了在特定场景下,经过时间...
总的来说,《Head First 设计模式》是一本适合初学者和经验丰富的开发者阅读的书籍,它不仅提供了设计模式的深入解析,还包含了大量的实践案例和代码示例,有助于读者将理论知识转化为实际技能。配合附带的Java源码...
这本书通过生动的例子和丰富的图解,深入浅出地介绍了这些模式,帮助读者理解并掌握设计模式在实际开发中的应用。无论是初学者还是经验丰富的开发者,都能从中受益,提升自己的编程思维和设计能力。
在编程领域,设计模式是一种被广泛认可的解决特定问题或实现特定目标的代码结构模板。经典C++设计模式是软件开发中的重要课题,它...所以,无论是新手还是经验丰富的开发者,都应该深入理解和掌握这些经典C++设计模式。
这个压缩包中的资源很可能是各种设计模式的案例分析、代码示例以及相关的学习指南,对于初学者来说是一份非常宝贵的学习资料。通过深入学习和实践,你可以逐步掌握这些设计模式,从而更好地设计和实现高质量的软件...
《Head First设计模式》是软件开发领域中一本非常受欢迎的书籍,它以通俗易懂的方式讲解了设计模式这一复杂的主题。设计模式是经验丰富的开发者在解决常见问题时总结出的最佳实践,是软件工程中的一种通用解决方案。...
在《深入浅出之[Head First 设计模式]》中,作者通过生动的图解、有趣的比喻和互动性强的示例,使读者能够轻松掌握各种设计模式的精髓。书中不仅讲解了每个模式的基本原理,还提供了实际应用场景,让读者能够直观地...
《C#设计模式》是一本面向C#程序员深入学习设计模式的专业书籍,它为初学者提供了宝贵的指导,有助于快速理解并掌握设计模式的核心概念。设计模式是软件开发中经过实践验证的、解决常见问题的可复用解决方案,是经验...
1.设计模式更抽象,J2EE 是具体的产品代码,我们可以接触到,而设计模式在对每个应用时才会产生具体代码。 2.设计模式是比 J2EE 等框架软件更小的体系结构,J2EE 中许多具体程序都是应用设计模式来完成的,当你深入...
《Head First设计模式》是软件开发领域中一本非常知名的经典著作,它以英文版的形式提供了深入浅出的设计模式讲解。这本书以其独特的“Head First”学习风格,通过丰富的图像、幽默的语言和互动性的教学方法,帮助...