• 迪米特法则


    一、定义

    迪米特法则(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 "派大星";
        }
    }
  • 相关阅读:
    使用pymouse模块时候报错No module named 'windows'
    解决PIL透明的图片放在新图片上报错
    解决PIL切圆形图片存在锯齿
    常见金融术语-帮助更好的理解金融业务需求
    FastJson序列化时过滤字段(属性)的方法总结
    数据库事务4种隔离级别及7种传播行为
    硬件网络接口规范
    「题解」P5906 【模板】回滚莫队&不删除莫队
    「学习笔记」优美的暴力——莫队
    2017 NOIp提高组 DAY2 试做
  • 原文地址:https://www.cnblogs.com/ki16/p/15049384.html
Copyright © 2020-2023  润新知