秋招准备100天---06

大话设计模式


迪米特法则

耦合的方式很多,比如组合,聚合,依赖,关联。

在类中的成员变量,函数参数,函数返回值如果是某一个类的对象,则这些类称为直接的朋友,但是如果是函数内部局部变量是某个类对象则不是直接的朋友。迪米特法则是说尽量减少这种在函数内的声明其他陌生类对象。

迪米特法则:只与直接的朋友通信。也叫做最少知识原则。

目的:减少类之间的耦合。当两个类不是直接的朋友关系,那么不要在函数中声明这个类对象,可以用第三个类进行中间调用。

外观模式Facade

为子系统提供统一的界面,相当于一个高层接口。

什么时候用?

  1. 当为多个复杂子系统提供一个简单接口,新建一个外观类。
  2. 如果遗留下来一个老系统,难以维护,但是很重要,可以新建一个外观类。

体现了依赖倒转原则和迪米特法则。

建造者模式Builder

就是将建造复杂对象的过程和组成单位的部件解耦。比如说创建游戏角色,那么就是把创建人物单独一个类Director,里面一个函数进行各部件组装,然后Builder类是包括各组件的生成函数。

建造者模式分析

缺点:一般建造者模式创建的产品有较多的共同点,或者说建造过程是一样的,如果不一样,那么就不合适。

和工厂模式相比:工厂模式一般是每个产品都有工厂类来生成实例,而建造者模式是复杂的组装过程实例化,这个任务交给director类。

观察者模式

是一种一对多的依赖关系。多个观察者观察同一个对象,当这个对象发生变化时,所有观察者都会得到通知。

观察者模式

当两个类相互耦合,可以考虑观察者模式进行解除耦合。在被观察者中实现一个函数进行多个观察者通知。

算法题

字符串的交错组成

3个字符串,str1,str2,aim,判断aim是不是str1和str2两个字符串的交错组成。

龙与地下城游戏

给定一个map,龙从左上角出发,到达右下角,每次只能向右或者向下移动,每一个位置有一个数,正数代表加血,负数代表失血,必须保证到达每个位置血量不能低于1,为了保证能见到公主,开始龙的血量至少为多少?

方法1:dp[i][j]表示到达(i,j)位置处最少出血量,那么转移方程为

dp[i][j] = min(dp[i][j-1],dp[i-1][j]),   (map[i][j]>=0)
dp[i][j] = 

可惜,这种思路是错的,所以也没有写出来。

方法2:从右下角向左上角走。因为我们最终需要得到dp[0][0]的值。

你可能感兴趣的:(100天,秋招准备100天)