解释器模式:
代码逻辑:
音阶和音符组合(O 2 E 0.5 G 0.5 A 3 E 0.5)
从头开始切割(包含空格),根据字母(case)写出相应的音符(1,2,3,4,5,6,7),根据数字写出相应得音阶(中高低音),重点是切割音符音阶组合的代码
//这一行没有把属性重新赋值,所以PlayText里面是O 2 E 0.5 G 0.5 A,(没有将属性重新赋值)
string playKey = context.PlayText.Substring(0, 1);
//这一行是将属性重新赋值,所以PlayText里面是2 E 0.5 G 0.5 A,(空格也是一个索引值)
context.PlayText = context.PlayText.Substring(2);
//(0,1),PlayText里面是2 E 0.5 G 0.5 A,将2截取出来
double playValue = Convert.ToDouble(context.PlayText.Substring(0, context.PlayText.IndexOf(" ")));
//(0,2)这一行是将属性重新赋值,所以PlayText里面是E 0.5 G 0.5 A
context.PlayText = context.PlayText.Substring(context.PlayText.IndexOf(" ") + 1);
何时使用:
1.给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子(就好像音乐中有7个音符,但是7个音符在每一个音阶上又是不同的声音,也像汉字,有很多相同的字,但是音调不一样,代表着不同的意思)
优点:
1.很容易改变和扩展文法,因为该模式使用类来表示文法规则(音阶),你可使用继承来改变或扩展该文法。也比较容易实现文法(音符),因为定义抽象语法树中各个节点的类的实现大体类似,这些类都易于编写
中介者模式:
代码逻辑:
联合国安理会的职责是有两个国家的属性,通过客户端将不同国家类实例化的对象赋值给各个国家的属性,(这样就可以调用联合国安理会中的方法了)根据客户端给出的调用信息(各个国家发出的消息),在联合国安理会里面判断,这个消息是给哪个国家发的,在发给相应的国家
何时使用:
1.用一个中介对象来封装一系列的对象交互(通过联合国安理会中声明各个国家和个国家的属性)。中介者使各对象不需要显式地相互引用(各个国家之间没有各个国家任何代码,没有联系),从而使其耦合松散,而且可以独立地改变它们之间的交互(联合国根据各国的消息,可以给相应的国家发消息,在中间可以做润滑剂,缓和各国之间的紧张氛围)
2.中介者模式一般应用于一组对象以定义良好但是复杂的方式进行通信的场合,以及向定制一个分布在多个类中的行为,而又不想生成太多的子类的场合
优缺点:
1.把交互复杂性变为了中介者的复杂性
2.由于把对象如何协作进行了抽象,将中介做为一个独立的概念并将其封装在一个对象中,这样关注的对象就从对象各自本身的行为转移到它们之间的交互上来,也就是站在一个更宏观的角度去看待系统。(比如巴以冲突,本来只能算国与国之间的矛盾,因此各自的看法可能都比较狭隘,但站在联合国安理会的角度,就可以从全球化、也更客观来看待这个问题,在调停和维和上做出贡献)
访问者模式:
代码逻辑:
状态:是用来接收男人/女人的结论或反应
人:用来接收状态
男人:重写人的方法,调用相应状态的(成功或失败或恋爱)的方法
女人:重写人的方法,调用相应状态的(成功或失败或恋爱)的方法
对象结构:用来存储数据,增加或移除男人女人,并把泛型集合中的男人女人都遍历出来,调用男人女人相应的方法(泛型集合中有的对象都调用)
何时使用:
1.表示一个作用于某个对象结构中的各元素的操作(增加或移除),它使你可以在不改变各元素的类(男人、女人)的前提下定义作用于这些元素的新操作(对象结构中只增加移除泛型集合中的类,但不修改类中的内容,根据不同的类调用不同的方法)
好处:
1.在添加新状态的时候,只需要新加个类就可以了,不需要修改其它类的信息
2.把处理从数据结构分离出来,如果系统有比较稳定地数据结构(成功、失败、恋爱),又又易于变化地算法的话,使用访问者模式就是比较合适的,因为访问者模式使得算法操作的增加变得容易
3.把数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由地演化
迭代器模式:
代码逻辑:
先将乘客聚集到公交车中(公交车类中的泛型集合),售票员根据公交车中的成员一个一个显示出来,根据判断成员是否为0,然后循环出各对象买票的行为
何时使用:
1.当你需要对聚集又多种方式遍历时,可以考虑用迭代器模式
2.就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部地数据
3.提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象地内部表示
备忘录模式:
代码逻辑:
游戏角色类:玩家地初始属性和保存角色状态和恢复角色状态
角色状态存储箱:就像是一个用来交换数值地一个中介,将初始地状态保存在这里面
角色状态管理者类:
策略模式: