学会设计模式,你就可以像拥有魔法一样,在开发过程中解决一些复杂的问题。设计模式是由经验丰富的开发者们(GoF)凝聚出来的最佳实践,可以提高代码的可读性、可维护性和可重用性,从而让我们的开发效率更高。通过不断的练习和实践,掌握其中的奥妙,选择合适的设计模式,能为我们的项目增加一丝神奇的魔力。
文章目录
- 定义
- 例子
- Coding
- 测试
- 测试结果
- 优点
- 缺点
定义
一个对象应该对其他对象保持最少的了解,使得系统功能模块相对独立。
即一个类作为一个调用方,应当对自己依赖的类(被调用的类)其中所处理的逻辑细节,知道的越少越好。
例子
食客到饭点通过服务员点餐,服务员通知厨师做菜
Coding
我们先定义一个类与类之间的关系:
- 如果被调用类在调用类中作为:成员变量的类型、方法参数类型、方法返回值类型,那么我们称被调用类和调用类是“朋友”关系
- 如果被调用类在调用类中仅作为:局部变量,那么我们称被调用类和调用类是“陌生人”关系
食客类:
食客吃饭,无需关心厨师如何烹饪菜肴。所以食客和服务员是朋友,和厨师是陌生人
public class Diner {
public void order(Waiter waiter, String tableNumber, String dishName) {
waiter.passDish(tableNumber, dishName);
}
}
食客类中,因为入参中有Waiter类,所以Waiter和Diner是朋友。
服务员类:
public class Waiter {
public Chef notice(String tableNumber) {
System.out.println("服务员接到" + tableNumber + "号桌点菜");
Chef chef = new Chef();
return chef;
}
public void passDish(String tableNumbe, String dishName) {
String cooking = notice(tableNumbe).cooking(dishName);
System.out.println(cooking);
System.out.println("服务员传菜");
}
}
服务员类中,notice方法返回值类型是Chef,所以服务员和厨师是朋友
注:类与类之间的耦合是不可避免的,遵循迪米特法则并不是完全解除依赖,而是在一定程度上降低类与类之间不必要的依赖。
厨师类:
public class Chef {
public String cooking(String dishName) {
return "厨师烹饪" + dishName;
}
}
测试
@Test
public void test() {
Diner diner = new Diner();
Waiter waiter = new Waiter();
diner.order(waiter, "11", "宫保鸡丁");
}
测试结果
服务员接到11号桌点菜
厨师烹饪宫保鸡丁
服务员传菜
我们只能尽量的不要让「陌生人」作为局部变量出现在类的内部,并且保障类对自己依赖的类知道的越少越好。
优点
1、降低了类之间的耦合度,提高了模块的相对独立性。
2、提高类的可复用率和系统的扩展性。
缺点
过度使用迪米特法则会使系统产生大量的中介类,从而增加系统的复杂性,使模块之间的通信效率降低。所以,在釆用迪米特法则时需要反复权衡,确保高内聚和低耦合的同时,保证系统的结构清晰。
文章后期会持续优化,如果觉得小名的文章帮助到了您,请关注小名,支持一下小名😄,给小名的文章点赞👍、评论✍、收藏🤞谢谢大家啦~♥♥♥
编码魔法师系列文章,会收录在小名的【设计模式】专栏中,希望大家可以持续关注🎉