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 "派大星";
        }
    }
  • 相关阅读:
    JSP
    token防止表单重复提交
    web应用程序性能优化
    js 优化
    文本查看及处理工具简单命令
    DNS之一---DNS服务及BIND服务,并实现DNS正向与反向解析
    企业级自动化运维工具应用实战ansible
    Linux小试牛刀
    Linux特殊权限及ACL权限
    文件的默认权限UMASK
  • 原文地址:https://www.cnblogs.com/ki16/p/15049384.html
Copyright © 2011-2022 走看看