六大设计原则
定义
高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象
核心思想就是,要面向接口编程,不要面向实现编程。
特点
-
模块间的依赖通过抽象发生,实现类之间不直接发生依赖关系,其依赖关系是通过接口或抽象类产生的;
-
接口或抽象类不依赖于实现类;
-
实现类依赖接口或抽象类。
示例
设计一个顾客
买家从TB购买商品
public class Customer {
public void shopping(TBShop shop) {
//购物
System.out.println(shop.sell());
}
}
这种设计存在缺点,如果该顾客想从另外一家商店(JD)购物
修改购买商家
public class Customer {
public void shopping(JDShop shop) {
//购物
System.out.println(shop.sell());
}
}
如果顾客继续想更换商家进行的购物的话,每次更换都需要修改代码,违背了开闭原则。 顾客和具体的商店进行了绑定,而不是依赖抽象,违背了依赖倒置原则。
优化
设计一个Shop
public interface Shop {
String sell();
}
设计商家的实现
public class JDShop implements Shop {
@Override
public String sell() {
return "从JD购物";
}
}
public class TBShop implements Shop {
@Override
public String sell() {
return "从TB购物";
}
}
买家绑定商家的抽象
public class Customer {
public void shopping(Shop shop) {
//购物
System.out.println(shop.sell());
}
}
购买
public class Client {
public static void main(String[] args) {
Customer customer = new Customer();
customer.shopping(new TBShop());
customer.shopping(new JDShop());
}
}