发表于: 2019-04-13 22:02:34
1 753
今天完成的事情:
1、今天开会的时候有和师兄提到最近没什么思路的事情,师兄给了我很多建议,也告诉我把思路写出来,写一个虚拟代码。
2、今天又看了很多关于数组和状态机的文章,感觉还是有很多东西不太懂,需要学习的地方也很多。
以下是今天改的代码:
var arr = sessionStorage.players;
players = JSON.parse(arr);
var str=sessionStorage.allDeads;
var allDeads=JSON.parse(str);
console.log(players);
console.log(allDeads)
var deads;
//取序号
$(function box() {
for (var i=0; i<players.length; i++){
if (players[i]=="杀手") {
var div='<div class="box kill" >'+'<p>'+(i+1)+"号杀手"+'</p>'+'</div>';
$(" .center").append(div);
}else{
var div='<div class="box" >'+'<p>'+(i+1)+"号玩家"+'</p>'+'</div>';
$(" .center").append(div);
}
}
for (var j = 0; j < allDeads.length; j++) {
$(".box:eq("+allDeads[j]+")").addClass("deads")
}
$(".center div").click(function(){
if($(this).hasClass("deads")){
alert("不可杀死人")
}else if(!$(this).hasClass("kill")){
$(this).toggleClass("box-select")
.siblings("div").removeClass("box-select")
deads=sessionStorage.deads=$(".center div").index($(this));
}else{
alert("不可杀队友")
}
})
})
明天计划的事情:
1、首先明天把虚拟代码写出来,这样就可以按照思路做任务了,可能会有些慢,不过至少做完一步知道下一步要做什么。
遇到的问题:
1、主要问题还是今天和师兄反应的不知该怎么进行任务的问题,不过师兄也告诉我大体的思路并让我写虚拟代码了,也算是完美解决了吧。
收获:
状态模式的定义:
允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。
我们以逗号分割,把这句话分为两部分来看。第一部分的意思是将状态封装成独立的类,并将请求委托给当前的状态对象,当对象的内部状态改变时,会带来不同的行为变化。电灯的例子足以说明这一点,在 off和 on这两种不同的状态下,我们点击同一个按钮,得到的行为反馈是截然不同的。
状态模式的优缺点
- 状态模式定义了状态与行为之间的关系,并将它们封装在一个类里。通过增加新的状态类,很容易增加新的状态和转换。
- 避免 Context 无限膨胀,状态切换的逻辑被分布在状态类中,也去掉了 Context 中原本过多的条件分支。
- Context中的请求动作和状态类中封装的行为可以非常容易地独立变化而互不影响。
状态模式中的性能优化点
- 有两种选择来管理 state 对象的创建和销毁。第一种是仅当 state 对象被需要时才创建并随后销毁,另一种是一开始就创建好所有的状态对象,并且始终不销毁它们。如果 state对象比较庞大,可以用第一种方式来节省内存,这样可以避免创建一些不会用到的对象并及时地回收它们。但如果状态的改变很频繁,最好一开始就把这些 state 对象都创建出来,也没有必要销毁它们,因为可能很快将再次用到它们。
- 在本章的例子中,我们为每个 Context 对象都创建了一组 state 对象,实际上这些 state对象之间是可以共享的,各Context 对象可以共享一个 state 对象,这也是享元模式的应
用场景之一。
状态模式和策略模式的关系
状态模式和策略模式像一对双胞胎,它们都封装了一系列的算法或者行为,它们的类图看起来几乎一模一样,但在意图上有很大不同,因此它们是两种迥然不同的模式。
策略模式和状态模式的相同点是,它们都有一个上下文、一些策略或者状态类,上下文把请求委托给这些类来执行。
它们之间的区别是策略模式中的各个策略类之间是平等又平行的,它们之间没有任何联系,所以客户必须熟知这些策略类的作用,以便客户可以随时主动切换算法;而在状态模式中,状态和状态对应的行为是早已被封装好的,状态之间的切换也早被规定完成,“改变行为”这件事情发生在状态模式内部。对客户来说,并不需要了解这些细节。这正是状态模式的作用所在。
评论