Ⅰ 谁给我解释下啥叫做观察者模式
很久以前的代码中用过,
找不到了,
给楼主拷个我的电子书上的,
嘿嘿
java深入到一定程度,就不可避免的碰到设计模式(design pattern)这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广泛,遵循一定的编程模式,才能使自己的代码便于理解,易于交流,Observer(观察者)模式是比较常用的一个模式,尤其在界面设计中应用广泛,而本站所关注的是Java在电子商务系统中应用,因此想从电子商务实例中分析Observer的应用.
虽然网上商店形式多样,每个站点有自己的特色,但也有其一般的共性,单就"商品的变化,以便及时通知订户"这一点,是很多网上商店共有的模式,这一模式类似Observer patern.
具体的说,如果网上商店中商品在名称 价格等方面有变化,如果系统能自动通知会员,将是网上商店区别传统商店的一大特色.这就需要在商品proct中加入Observer这样角色,以便proct细节发生变化时,Observer能自动观察到这种变化,并能进行及时的update或notify动作.
Java的API还为为我们提供现成的Observer接口Java.util.Observer.我们只要直接使用它就可以.
我们必须extends Java.util.Observer才能真正使用它:
1.提供Add/Delete observer的方法;
2.提供通知(notisfy) 所有observer的方法;
//产品类 可供Jsp直接使用UseBean调用 该类主要执行产品数据库插入 更新
public class proct extends Observable{
private String name;
private float price;
public String getName(){ return name;}
public void setName(){
this.name=name;
//设置变化点
setChanged();
notifyObservers(name);
}
public float getPrice(){ return price;}
public void setPrice(){
this.price=price;
//设置变化点
setChanged();
notifyObservers(new Float(price));
}
//以下可以是数据库更新 插入命令.
public void saveToDb(){
.....................
}
我们注意到,在proct类中 的setXXX方法中,我们设置了 notify(通知)方法, 当Jsp表单调用setXXX(如何调用见我的另外一篇文章),实际上就触发了notisfyObservers方法,这将通知相应观察者应该采取行动了.
下面看看这些观察者的代码,他们究竟采取了什么行动:
//观察者NameObserver主要用来对产品名称(name)进行观察的
public class NameObserver implements Observer{
private String name=null;
public void update(Observable obj,Object arg){
if (arg instanceof String){
name=(String)arg;
//产品名称改变值在name中
System.out.println("NameObserver :name changet to "+name);
}
}
}
//观察者PriceObserver主要用来对产品价格(price)进行观察的
public class PriceObserver implements Observer{
private float price=0;
public void update(Observable obj,Object arg){
if (arg instanceof Float){
price=((Float)arg).floatValue();
System.out.println("PriceObserver :price changet to "+price);
}
}
}
Jsp中我们可以来正式执行这段观察者程序:
<jsp:useBean id="proct" scope="session" class="Proct" />
<jsp:setProperty name="proct" property="*" />
<jsp:useBean id="nameobs" scope="session" class="NameObserver" />
<jsp:setProperty name="proct" property="*" />
<jsp:useBean id="priceobs" scope="session" class="PriceObserver" />
<jsp:setProperty name="proct" property="*" />
<%
if (request.getParameter("save")!=null)
{
proct.saveToDb();
out.println("产品数据变动 保存! 并已经自动通知客户");
}else{
//加入观察者
proct.addObserver(nameobs);
proct.addObserver(priceobs);
%>
//request.getRequestURI()是产生本jsp的程序名,就是自己调用自己
<form action="<%=request.getRequestURI()%>" method=post>
<input type=hidden name="save" value="1">
产品名称:<input type=text name="name" >
产品价格:<input type=text name="price">
<input type=submit>
</form>
<%
}
%>
执行改Jsp程序,会出现一个表单录入界面, 需要输入产品名称 产品价格, 点按Submit后,还是执行该jsp的
if (request.getParameter("save")!=null)之间的代码.
由于这里使用了数据javabeans的自动赋值概念,实际程序自动执行了setName setPrice语句.你会在服务器控制台中发现下面信息::
NameObserver :name changet to ?????(Jsp表单中输入的产品名称)
PriceObserver :price changet to ???(Jsp表单中输入的产品价格);
这说明观察者已经在行动了.!!
同时你会在执行jsp的浏览器端得到信息:
产品数据变动 保存! 并已经自动通知客户
上文由于使用jsp概念,隐含很多自动动作,现将调用观察者的Java代码写如下:
public class Test {
public static void main(String args[]){
Proct proct=new Proct();
NameObserver nameobs=new NameObserver();
PriceObserver priceobs=new PriceObserver();
//加入观察者
proct.addObserver(nameobs);
proct.addObserver(priceobs);
proct.setName("橘子红了");
proct.setPrice(9.22f);
}
}
你会在发现下面信息::
NameObserver :name changet to 橘子红了
PriceObserver :price changet to 9.22
这说明观察者在行动了.!!
Ⅱ MC有什么指令能让在创造模式和观察者模式下的全部玩家无限死亡谢谢了!!!
1.9以上:命令方块循环 无视红石 /kill @a[m=1]
另一个夜视循环 无视红石 /kill @a[m=3]
1.9一下做个高频红石连这两个就好
不过注意 修改命令方块需要创造 而你做的会让你无限死亡
Ⅲ 《我的世界》输入指令成观察者是怎么回事
正常情况。
Ⅳ 求一个CS1.6变成观察者的命令,是要控制台输入的命令!
HLTV服务器命令全
这篇文章是最新发布的HLDS 4.1.1.1/3.1.1.1中的HLTV的自诉文章翻译而来,对简单的HLTV架设和大规模HLTV NET的架设都有详细地介绍。HLTV独特的实时转播方式注定它将会在电子竞技的发展道路上的重要地位,这一点也在世界各国的CS比赛,以及国内的几次大规模CS大赛,浩方平台的几次转播中得以体现。HLTV随着HLDS 4.1.1.1/3.1.1.1的发布也变得更加成熟,困扰大家两年多的闪光弹bug也已经修复,但是国内很多服务器管理员和比赛组织者都不是很了解HLTV的用法或者只是了解最近本的用法,很多很有趣的功能没有实现,基于此,将这篇很详细的README文章介绍给大家。
文章中一些不常用的命令可能会有一些翻译上的错误,欢迎大家指出,谢谢。
1、总览
Half-Lift TV提供了理论上无限制观察者观看在线游戏的可能。他们可以在游戏服务器中跟随任一名玩家的视角。观察者对于游戏者来说是不可见的,也不能以任何方式干扰进行中的游戏。每个观察者可以选择任意玩家的任意视角。为了获得更有趣的观察体验,观察者可以打开自动切换模式,这样镜头将自动切换到以合适的角度来观看精彩的镜头。这样观察者们就能舒服的靠在椅背上不用作任何动作。观察者们还可以用最基本的HL Chat模式来互相沟通。
大多数流行的Half-Life的MOD例如CS,Team Fortress Classic,DOD都支持HLTV,HLTV的提供者拥有对HLTV系统的完全控制权,可以改变观察者人数,添加文字信息,更换HLTV logo等等。播放的画面可以自定义一个延迟时间,默认的是30秒,这样可以确保正在比赛的队伍不可能通过HLTV来得到一些有用的对手信息。建立一个单独的支持100人的HLTV Server是很简单的事情,不需要对默认设置作任何改变。
架设一个庞大的HLTV网络来支持上千人的观看需要为服务器的配置等等准备多一些的时间和经验。
2、观看游戏
为了观看一个HLTV,启动Half-Life(或其他MOD包),进入多人模式,然后进入HLTV提供者提供给你的IPort,或者直接在控制台输入(假设服务器为192.168.0.1:27020)
connect 192.168.0.1:27020
这样的命令,即可进入HLTV服务器观看比赛。
默认的HLTV端口是27020,但是这是可以更改的,通常会包括在给出的IP地址中提供。
你可以用不同的模式来观看游戏:跟随视角,第一人称视角,自由观察,地图总览,地图跟随。最简单的切换视角方法是按“跳跃”键(默认是空格键),另外一种方法是使用按“蹲下”键(默认是Ctrl)激活的观察菜单,在那儿你可以定义自己的观察风格并且开启自动切换模式。循环按下“使用”(默认是E)可以开关画中画模式。
下列HL控制台命令可以在用来自定义观察模式:
spec_autodirector <0|1> - 开启或者关闭自动切换模式
spec_drawcone <0|1> - 在地图总览模式显示你的视角范围
spec_drawnames <0|1> - 在玩家标志下显示玩家的名字
spec_drawstatus <0|1> - 显示游戏信息(时间,地图名称等)
spec_pip <0|1> - 开关画中画功能
spec_menu - 开启观察者菜单
spec_help - 显示帮助屏幕
spec_mode <1-6> [<0-4>] - 设置主显示模式,第二个参数是设置画中画模式。并非所有的组合都有效。
主显示模式:
1、锁定跟随 2、自由跟随
3、自由观察 4、第一人称视角
5、地图总览 6、地图锁定跟随
画中画模式:
0、关闭画中画 1、自由跟随
2、第一人称视角 3、地图总览
4、地图跟随
以上命令中 <>,()包括的为必填项,[]包括的为可选项,下同。
3、基本HLTV架设
HLTV广播系统的核心是HLTV服务器,也称之为HLTV代理。HLTV在控制台窗口运行,类似于HL的专业服务器。为了转播一台指定服务器上的比赛,HLTV代理像一个普通玩家一样连入这台服务器,然后观察者们连入这台HLTV代理,这样游戏数据流就通过HLTV代理转发到所有的观察者客户端。下面这个图示就是一个基本的HLTV配置:
HLTV服务器命令全
HL Game Server --> HLTV 代理 -->观察者
HLTV代理可以支持的客户端人数取决于服务器的硬件配置和网络条件,理论上来说,一个单独的HLTV可以支持最多255个观察者,但是请注意,平均每个支持了100个观察者的HLTV代理需要2M的带宽才能流畅收看,如果需要支持更多的观察者,网络负荷必须被分部到多HLTV代理上去。
第一个连接到游戏服务器上的HLTV服务器被称为主服务器,在上面可以进行游戏数据流的延时和发包率等综合广播的设置,其他的HLTV代理连入到这台主服务器上作为接替。这样的连接数量和方式是不受限制的,可以串联也可以并连。重要的是他们不要处于同一个网络中,这样才能确保带宽被均衡使用。
--> HLTV 转播服务器 1 --> 观察者
HL Game Server --> HLTV 主服务器--> HLTV 转播服务器 2 --> 观察者
--> HLTV 转播服务器 3 --> 观察者
4、游戏比赛转播
让我们来看一下最普通的设置,一台HLTV代理在局域网环境中。这是最普通的情况,默认的HLTV设置不需要作任何改动。选择一台专用计算机作为里的HLTV代理并且安装Half-Life专业服务器版软件,它包含了所有的HLTV代理文件。这并不需要你的计算机上安装有Half-Life这个游戏。
启动HLTV应用程序(带有小照相机的HL的小图标)就能看到HLTV的控制台窗口,显示了一些初始化信息后(如果初始化进行了很长时间,可能是HLTV不能解析出一些IP地址,那么请在HLTV启动命令行增加 "-nodns"参数来跳过),控制台就可以接受你的命令了,下面我们用">"来代表命令行提示符,记住你只需要输入">"后面的字符就可以了。首先给你的HLTV代理起一个独特的名字:
>name "My HLTV Proxy"
我们假定你的HLTV Proxy的IP为192.168.0.2,你想观察在192.168.0.3:27015上的游戏,那么键入以下的命令使HLTV代理连入:
>connect 192.168.0.3:27015
过了一会儿HLTV完全连入服务器并且准备提供观察者服务时,用"status"命令可以检查HLTV代理的连接状态:
>status
--- HLTV Status ---
Local IP 192.168.1.2:27020, FPS 72.8, Network In 0.8 Out 0.9
Local Slots 128, Spectators 0, Proxies 0
Source: Server "Half-Life" (192.168.1.3:27015)
Total Slots 128, Spectators 0, Proxies 1
Time 01:02, Game "valve", Map "maps/frenzy.bsp", Players 1
"status"命令可以显示你的IP、每秒刷新的HLTV系统的进出流量、你的HLTV代理提供的观察者数量,这台游戏服务器中所有HLTV广播系统的观察者数量。游戏源可以是游戏服务器,也可以使另一台HLTV代理,甚至一个Demo文件。
5、录制HLTV Demos
HLTV demo文件和普通的Half-Life游戏录像差不多,但是你可以选择任意的视角和视点以及跟随的玩家。回放一个HLTV demo的时候并不需要HLTV服务器,只要启动Half-Life并且在控制台输入" playdemo (demo name)"或者"viewdemo (demoname)"就可以了。录制一个HLTV demo,需要将HLTV代理连入游戏server,并且在控制台输入:
>record (name)
发出这一命令后,所有的游戏数据将被录制下来,demo文件会放在当前的Mod目录下,例如 \cstrike。所有的demo文件将被默认指定为如下格式的文件名:<名称>-<时间>-<地图>.dem,demo文件也记录了一些发往观察者的数据,这意味着,demo文件记录了和观察者同步的游戏信息。
停止录制的命令是"stoprecord"。
有的时候只需要录制HLTV的demo而并不想进行广播的话,可以增加这样一些命令:
>maxclients 0 //不允许观察者客户端
>delay 10 //最低的延迟设置
>rate 10000 //最高的数据速率
>updaterate 20 //基本上行输率
>nomaster 1 //不在master服务器注册
注://后是命令注释,在平常使用中不需要输入
HLTV服务器命令全
6、大规模广播
建立一个可以支持大规模观察者(>1000人)的HLTV网络是一个艰难且耗时的工作。下列指导将帮助你配置和运行以这样的一个HLTV网络。一条重要的规则是:“要质量,不是只要数量”。相对于使用所有的带宽来说,建立少一点观察者的选择显然更好,这样所有的观察者都不会为lags和超时所困扰。检查你的带宽容量并且计算出你的HLTV服务器能支持多少观察者,平均每个观察者需要2-3K的流量,CPU和内存在目前流行的PC系统中到是不太会成为性能瓶颈。
这个列表给出大致的Internet连接HLTV所需要带宽:
- ISDN 64Kbps : 2个观察者
- ADSL 512Kbps(上行速率) : 20个观察者
- T1 1.5Mbps : 75个观察者
- LAN 10Mbps : 500个观察者
- T3 75Mbps : 4000个观察者
使用"maxclients"命令可以控制HLTV服务器接受的客户端连入数量,确定"maxrate"参数被设为一个合理的数值,例如:3500 kB/sec。更低的数值也是可能的,但是会造成观察者们产生"choke"。命令"maxrate"并不影响HLTV代理服务器之间的带宽限制,仅对观察者客户端有效。为了降低带宽需求,你可以关闭internet HLTV chat("chatmode 0")或者将游戏的上行速率从默认的20降低到10("updaterate 10")。低一些的上行速率可以节省25%的带宽并且这是可接受的,因为在这时,观察这并不需要和真实玩家相同的上行速率。
一个针对大规模广播非常普遍的设置是使用两台分离的HLTV服务器来创建一个私有段和一个公共段。我们假定游戏服务器在一个封闭的局域网中外网无法到达。这确保了最大的安全无法被外界攻击(例如D.O.S攻击)。HLTV主服务器在局域网中启动,并且它的外网地址保密。第二台拥有真实IP地址的HLTV服务器在局域网外启动并且连入HLTV主服务器。这第二台HLTV服务器是公众HLTV发布机,IP和端口公开给观众们,并且所有的转播服务器都连入这台HLTV发布机。这样HLTV主服务器就在安全的局域网环境下工作,并且可以被用来录制demo或者现场放映机。观察者们连入HLTV发布机或者其他转播服务器。这样所有的网络负载就被均衡到了所有的HLTV代理上。
如图:
+---- Private LAN -----++------ Public Internet --------+
-> HLTV Proxy 1
HL Server -> HLTV主服务器 ->HLTV发布服务器-> HLTV Proxy 2
-> HLTV Proxy 3
主服务器和发布服务器的配置文件不同:
master.cfg
nomaster 1 //不在WON主服务器上注册
proxypassword MyPWD //保护密码
publicgame 0 //不显示游戏服务器IP
dispatchmode 0 //不分派观察者
dispatcher.cfg
forcemaster 1 //注册到WON主服务器上
publicgame 0 //不显示游戏服务器IP
dispatchmode 2 //分派所有客户端到其他服务器
hostname MyGame //公开的HLTV服务器名称
如果你在运行3个或者更多的HLTV服务器,一个很好的方案是通过服务器管理工具来使用RCON命令管理他们。在HLTV服务器上开启RCON的方法是设置"adminpassword"选项。同时"proxypassword"可以确保只有经过你授权的HLTV提供者才可以连入你的HLTV网络。否则任何人都可以使用缓慢的HLTV代理连入你的网络打乱你的整个网络的负载均衡。
7、HLTV设置
一个简单的的控制台命令语法:命令将被描述为以下形式:
command (parameter) [(parameter)] - description
一条命令或许会有一个或者多个参数。[]中的参数为可选项,一般来说参数包括:
(string) : 文字,如果文字中包含空格则必须被引号包括例如 "My Name"
(n) : 任意整数,例如:42
(f) : 任意浮点数,例如:4.2
(IPort) : IP地址,例如:192.168.0.1:27020
(a|b|c) : 可选择的选项,或者a或者b或者c
注意;所有的<,>,(,),|,[,]这样的字符是不包含在最终输入在控制台上的命令中的。大多数命令符合布尔代数开关,即1表示打开,0表示关闭。
HLTV服务器命令全
connect (IPort) - 连接HLTV代理到游戏服务器(默认port为27015)
disconnect - 从服务端口断开,但是不停止广播,所有的观察者仍然保持连接状态
stop - 断开连接,同时停止广播
quit - 退出HLTV程序
retry - 重试最后一次服务器连接
autoretry <0|1> - 如果开启,HLTV因为任何理由的断开后将自动重新连接服务器
name (text) - 设置HLTV代理计分版上的名称
hostname (text) - 设置HLTV服务器在服务器列表中的名称
serverpassword (text) - 设置游戏服务器连接密码,连入需要密码的服务器时使用
adminpassword (text) - 设置RCON管理员和评论员密码
proxypassword (text) - 设置其他HLTV连入的密码
spectatorpassword (text) -设置观察者密码,对其他HLTV服务器也有效
clients - 列出已经连接的观察者
proxies - 列出已经连接的其他HLTV服务器
players - 列出游戏服务器中的玩家
kick (ID) - 踢出指定名字的观察者
bann (IP) - 禁止IP连接
say (text) - 向游戏服务器发送文本信息
msg (text) [(ration) (pos x) (pos y) (color hex rgba)] - 向所有的观察者发送大屏幕信息
localmsg (text) [(ration) (pos x) (pos y) (color hex rgba)] -和msg相同,但是只对本服务器上观察者发送
servercmd (string) - 转发命令给游戏服务器
clientcmd (group) (string) - 发送控制台命令给所有指定群组的客户端:1=观察者 2=其他HLTV服务器 3=所有
loopcmd (id) (n) (string) - 这一命令将每(n)秒执行(string)中的命令。(id)取1到64中的数字来认定这条loopcmd,"loopcmd (id) none"
将取消正在循环的命令。loopcmd不带任何参数将列出正在循环的命令。
signoncommands (string) - 本地观察者连接后将被执行的控制台命令,多条命令可以用分号来分隔。
maxclients (n) - 设置本服务器的观察者数量上限(默认为128)
delay (n) - 从主HLTV上接受的游戏数据流延迟时间,默认是30秒来消除作弊的可能,最低为10秒。
rate (n) - 游戏服务器发送到HLTV的带宽速率
updaterate (n) - 从游戏服务器发送到HLTV的游戏上行速率
maxrate (n) - 观察者可用的最大带宽速率
maxqueries (n) - 服务器列表每秒得到的服务器信息数量
dispatchmode (0|1|2) - 模式1(Auto)将会把连接负载自动均衡到其他HLTV服务器,模式2(Always)将会把所有连接转发到其他HLTV服务器,这样本台HLTV服务器就成了转发机,模式0(OFF)将不会转发任何连接。
publicgame <0|1> - 如果public为1,游戏服务器的IP将能被观察者看到,并且可以使用"joingame"命令进入游戏服务器。
offlinetext (string) - 如果HLTV没有继续转播,观察者被拒绝的时候将看到的文字信息。
chatmode <0|1|2> - 如果chatmode为0,观察者不能聊天,如果是1,连入同一台服务器的观察者可以看到彼此之间的信息,如果是2,整个HLTV NET中所有的观察者将能互相聊天。
bannerfile (file) - 指定一个TGA文件作为观察者界面的LOGO。
ping (hostort) - ping一个HL服务器
nomaster <0|1> - 是否在主WON服务器注册
forcemaster <0|1> - 是否强迫在主WON服务器注册
heartbeat - 手动发送状态信息给WON服务器
rcon (string) - 发送远程命令给其他服务器
rconaddress (IPORT) - 设定远程控制目标服务器
rconpassword (string) - 验证远程控制目标服务器的密码
cheeringthreshold (f) - number of cheering players must be above this threshold to play the cheering sound (by default 0.25).
blockvoice <0|1> - 是否过滤所有的语音数据。
cmdlist - 列出所有命令
logfile <0|1> - 开启或关闭控制台log文件"logfile(date).log"
status - 显示服务器信息
moles - 显示所有加载的HLTV模块和版本
exec (filename) - 执行一个.cfg文件
echo (string) - 向HLTV控制台先是一条文本
developer <0|1> - 开发者模式将显示更多的除错信息
record (filename) - 录制demo
stoprecord - 停止录制demo
playdemo (filename) - 广播一个demo文件
控制台命令通过按"TAB"可以自动完成,所有的命令都可以放在hltv.cfg文件中,每次启动时自动执行。
一些参数只能在命令行启动
-port (n) - 指定HLTV端口,默认为27020
-ip (IP) - 在有多IP的主机上强制使用某个IP
-comm (filename) - 设置一个master server信息文件取代woncomm.lst
-nodns - 禁用DNS解析
-maxfps (n) - 设置最大系统刷新率,默认为100
-cachesize (n) - 设置帧缓存大小,默认为32
-highpriority - 以高优先权启动HLTV程序(仅在win32系统可用)
-steam - 服务器支持特殊流模式
-dev - 开发者模式
上述参数在运行时不可更改,但是他们可以在config文件中指定。
所有的控制台命令也可在命令行中使用,注意在前面加上"+"
例如:
hltv.exe +connect localhost:27015 -port 27021
Half-Life服务器可以设置sv_proxies (n)来确定允许多少HLTV服务器连入,如果禁止HLTV连入,可以设为0,设为1意味着允许主HLTV连入。
应该有你要用的 如果还没有给你一个网站自己看吧: http://www.verycd.com/groups/@g2386769/739452.topic
Ⅳ 我的世界观察者模式怎么开
我的世界观察者模式开启方法:
1、首先,以OP权限进入游戏;如图所示。
Ⅵ 我的世界网易版,旁观者模式指令是什么
玩家可以玩我的世界游戏,进入旁观者,他们需要使用命令/Gamemode3。
你也可以输入另一个指令/gamemodeSP。你可以进入旁观者模式,但如果你想成为旁观者,你必须在旁观者模式使用这个命令。
旁观者模式必须输入命令/gamemode3
电脑版本必须是1.8或以上,手机版本必须是1.0或0.17
附上生存模式,创造模式和冒险模式的说明:
生存/gamemode0
创建/gamemode1
冒险/gamemode2
风险模型和极限答案不一样。
我的世界是一款沙盒构建游戏。于2009年5月17日发出。受《无尽矿工》等游戏的启发,这款游戏由瑞典游戏设计师MarcusAlexaNotch创建,现在由Mojang工作室作为Xbox工作室的一部分进行维护。
(6)观察者命令扩展阅读:
我的世界简介:
呈现的世界不是华丽的图片和特效,而是游戏玩法。
玩家可以在游戏的三维空间中创建和摧毁方块,甚至可以在多人和单人世界中体验不同的游戏模式,创造令人惊叹的建筑、创作和艺术品。
《我的世界》专注于让玩家探索、互动和改变由方块生成的地图。除了广场,环境单体还包括植物、动物和物体。
游戏中的各种活动包括收集矿物,对抗敌人生物,合成新的方块,收集游戏中发现的资源工具。游戏中的无限模式允许玩家创建建筑,艺术品和艺术品在各种多人服务器或在他们的单人模式。
其他功能包括逻辑操作和远程操作的红石电路,收割机和轨道。除了主世界,游戏还有被称为“低地世界”和“末日之地”的维度。
Ⅶ 观察者模式的指令该怎么打
/gamemode 3