摘要:
既定访问者模式类图: 假设现在需求要扩展数据结构,增加一种具体元素,男与女之外的一种不明物体,我们暂时把它称为“怪兽”,在既有访问者模式的架构下,应该怎样?首先增加一个Bruce类,实现Person接口。最麻烦的是要修改访问者接口及其所有具体访问者! 因为Visit方法中没有包含访问Bruce对象的行为,因此我们被迫要去手工更改Visitor(包括抽象的,具体的),在其中添加有关Bruce对象 的行为,这严重违反了“开放-封闭”原则。究其原因在于目前的结构下,被访问对象与访问对象互相依赖,自然不利于分离变化,必须去掉一层依赖关系。 我们尝试把Visitor对Person(元素)的依赖关... 阅读全文
摘要:
定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样就可以将 该对象恢复到原先保存的状态类型:行为类类图:备忘录模式的结构发起人:记录当前时刻的内部状态,负责定义哪些属于备份范围的状态,负责创建和恢复备忘录数据。备忘录:负责存储发起人对象的内部状态,在需要的时候提供发起人需要的内部状态。管理角色:对备忘录进行管理,保存和提供备忘录。 阅读全文
摘要:
阅读全文
摘要:
阅读全文
摘要:
阅读全文
摘要:
优点: 1.模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复代码。 2.子类实现算法的某些细节,有助于算法的扩展。 3.通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合“开放-封闭原则”。缺点: 每个不同的实现都需要定义一个子类,这会导致类的个数的增加,设计更加抽象。适用场景: 1.在某些类的算法中,用了相同的方法,造成代码的重复。 2.控制子类扩展,子类必须遵守算法规则。 阅读全文
摘要:
62-63=1 移动一位数,使等式成立! 阅读全文
摘要:
1,2,3,4,5五个数组成一个两位数和一个三位数,要使乘积最大,应该是哪两个数,要使乘积最小呢? 1 <?php 2 $min=10000; 3 $max=0; 4 $max_a = 0; 5 $max_b = 0; 6 $min_a = 0; 7 $min_b = 0; 8 for($a=1;$a<6;$a++){ 9 for($b=1;$b<6;$b++){10 if($b!=$a){11 for($c=1;$c<6;$c++){12 if($c!=$b&&$c!=$a){13 ... 阅读全文
摘要:
阅读全文
摘要:
阅读全文
摘要:
阅读全文
摘要:
阅读全文
摘要:
阅读全文
摘要:
阅读全文
摘要:
阅读全文
摘要:
阅读全文
摘要:
阅读全文