六大设计原则之迪米特原则

迪米特原则:最少知识原则。一个对象对外暴露最少与它相关的知识,通俗的讲,调用者只需要
知道它是做什么的以及怎么调用它即可,不需要知道它内部是什么实现的。我们还是举个例子来
说明一下,比如我们去一个餐厅吃饭,我们会点单,选择我们喜欢吃的菜,然后叫服务员,服务
员把我们点的菜单送到厨房,由厨师来做。在这里我们不需要知道厨师是怎么做的,我们只需要
按照菜单点菜就行了。对一个类来说,调用者不需要知道被调用者中是如何实现的–如同餐厅顾
客不需要知道厨师怎么的做的菜一样。我们只需要知道这类的调用方法即可,如同我们知道请服
务员帮忙就好了。总之我们只与服务员打交道就可以,服务员相当于一个中介。

//一个餐厅中的顾客,点餐,点餐后的各种服务,买单等都是通过服务员(Waiter)去完成的,
public class Customer {
    Waiter waiter = new Waiter();
    private String myOrder = "";
    public void Customer(){
        myOrder = waiter.menu("宫保鸡丁");
    }
    public void myService(){
        //我想要的其他服务可以直接通过服务员去完成
        waiter.orterService("告诉厨师不要放太多辣椒。");
        waiter.orterService("给我先上一杯茶吧");
        waiter.Checkout("100");
    }
}

//服务员成了顾客和厨师以及餐厅其他人工作人员的枢纽
public class Waiter {
    Cook cook = new Cook();
    public String menu(String order){
        return cook.food(order);
    }

    public void orterService(String service){
        //服务员根据顾客的需要提供不同的服务
        //需要厨师去做的
        cook.SpecialService(service);
        //其他服务
        MyService(service);
    }

    public void Checkout(String price){
        //服务员领到结账台完成结账,或者服务员可以直接结账
    }

   private void MyService(String myService){
       //服务员可以自己完成的各种服务
   }
}

//厨师只需要根据服务员给过来的菜单以及一些特别的需求进行烹饪即可
public class Cook {

    public String food(String order){
        //Cooking from According to the menu
        return "做好宫保鸡丁";
    }

    public void SpecialService(String service){
        //根据 service 为顾客提供服务
    }

}

这样顾客–服务员–餐厅的各种服务都能完美的运转起来了(当然了哪种小餐馆例外了),顾客
享受到了简单专业顾客体验,下次就会再次光临,不用一下跑厨房跟厨师交流,一下到自己去找
其他服务,如茶水等。总之,顾客不需要知道餐馆的具体服务,具体运营,厨师的具体做法,我
只是提出我合理的需求,然后通过服务员去为我完成即可。迪米特原则就是这样,对其他的类(如
厨师是如何烹饪的)知道得越少越好。

  • 最后简单总结下这六大设计原则:

1.单一职责原则:侧重于功能性,一个类提供一个或者一组功能。

2.开闭原则:不更改已有的代码,通过扩展方式来实现新的需求。

3.里式替换原则:建立一个规范(抽象),使用时用具体的实现类替换掉这个规范(抽象),保证系统的扩展性、灵活性。

4.依赖倒置原则:依赖于抽象(接口或抽象类)编程,而不依赖具体的细节实现,

5.接口隔离原则:一个接口中的方法尽可能的少,以避免实现它的类实现了不必要的方法。

6.迪米特原则:让使用它的类知道它的实现细节越少越好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值