zoukankan      html  css  js  c++  java
  • 迪米特法则

    一、定义

    迪米特法则(Law of Demeter)又叫作最少知识原则(The Least Knowledge Principle),一个类对于其他类知道的越少越好,就是说一个对象应当对其他对象有尽可能少的了解,只和朋友通信,不和陌生人说话。英文简写为: LOD。

    二、案例

    ①、

    /**
     * @author 作者 ki16:
     * @version 创建时间:2021年7月23日 下午3:39:03
     *
     */
    
    public class LOD {
        public static void main(String[] args) {
            //海绵宝宝<--->章鱼哥<--->派大星
            
            //海绵宝宝找章鱼哥
            Spongebob spongebob = new Spongebob();
            System.out.println(spongebob.play(new OctopusBrother()));
            
            //章鱼哥找派大星
            System.out.println(new OctopusBrother().playWithPatrickStar()); 
        }
    }
    
    //海绵宝宝
    class Spongebob{public String play(OctopusBrother octopusBrother) {
            return octopusBrother.play();
        }
    }
    
    //章鱼哥
    class OctopusBrother{
        public String play(){
            return "章鱼哥";
        }
        public String playWithPatrickStar(){
            PatrickStar patrickStar = new PatrickStar();
            return patrickStar.play();
        }
        
    }
    
    //派大星
    class PatrickStar{
        public String play() {
            return "派大星";
        }
    }

    ②、与依赖倒转原则结合

    /**
     * @author 作者 ki16:
     * @version 创建时间:2021年7月23日 下午3:39:03
     *
     */
    
    public class LOD {
        public static void main(String[] args) {
                    Spongebob spongebob = new Spongebob();
                    spongebob.setOctopusBrother(new OctopusBrother());
                    System.out.println(spongebob.play(OctopusBrother.class));
                    
                    
                    spongebob.setCrabBoos(new PatrickStar());
                    System.out.println(spongebob.play(CrabBoos.class));
                    
                    
        }
    }
    
    //海绵宝宝
    class Spongebob{
        private OctopusBrother octopusBrother;
        private CrabBoos crabBoos;
        
        public OctopusBrother getOctopusBrother() {
            return octopusBrother;
        }
        public void setOctopusBrother(OctopusBrother octopusBrother) {
            this.octopusBrother = octopusBrother;
        }
        public CrabBoos getCrabBoos() {
            return crabBoos;
        }
        public void setCrabBoos(CrabBoos crabBoos) {
            this.crabBoos = crabBoos;
        }
    
        public  <T> String play(Class<T> clazz) {
            String name = clazz.getName();
            System.out.println("name=" + name);
            if ("OctopusBrother".equals(name)) {
                return octopusBrother.play();
            }else if ("CrabBoos".equals(name)) {
                return crabBoos.play();
            }
            return null;
        }
    }
    
    //章鱼哥
    class OctopusBrother{
        public String play(){
            return "章鱼哥";
        }
    }
    
    
    //蟹老板
    abstract class CrabBoos{
        abstract String play();
    }
    
    
    //派大星
    class PatrickStar extends CrabBoos{
        @Override
        String play() {
            return "派大星";
        }
    }
  • 相关阅读:
    Go语言实现:【剑指offer】复杂链表的复制
    Go语言实现:【剑指offer】字符串的排列
    Go语言实现:【剑指offer】机器人的运动范围
    Delphi10.3的DBGrid美化(03)
    uniGUI学习之uniButton设置图标+扁平化CSS(34)
    UniGUI学习之hBox布局(33)
    Bug集锦
    ImageNamed、imageWithContentsOfFile、SupportingFiles、Images.xcassess
    MVC设计模式
    [转]iOS开发之视图控制器(UIViewController)
  • 原文地址:https://www.cnblogs.com/ki16/p/15049384.html
Copyright © 2011-2022 走看看