秋招准备100天---06

    xiaoxiao2023-10-15  33

    大话设计模式


    迪米特法则

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

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

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

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

    外观模式Facade

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

    什么时候用?

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

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

    建造者模式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]的值。

    最新回复(0)