zoukankan      html  css  js  c++  java
  • 依赖倒转原则

    依赖倒转原则:通俗点就是,一个类和其他的类建立关系的时候,尽可能的与它们的父类建立关系,避免与子类建立联系。在设计变量时,能用父类尽量用父类。

    下面是一道经典例题,我们通过抽象出灯泡类即红灯黄灯各种灯的父类,来让它与台灯建立联系,这样,即使更换灯泡也不用再修改台灯类的代码,并且我们

    将发光方法抽象出来,让他的子类各种灯泡去实现他的发光方法。

    定义一个台灯类,里面有一个开灯方法。
    定义一个灯泡类,该类为抽象类,定义发光的方法,它有两 个子类,红灯泡和黄灯泡。
    定义一个Test类,写上主函数创建台灯对象调用开灯方法, 实现传入红灯泡打印发红光,传入黄灯泡打印发黄光。

    public class  TestLight{//测试类
        public static void main(String[] args) {
            Bulb redbulb = new RedBulb();//创建一个红灯泡对象
            Bulb yellowbulb = new YellowBulb();//创建一个黄灯泡对象
            Light light = new Light();//创建一个台灯对象
            light.setLight(redbulb);//将红灯泡放进台灯里面
            light.bulbPower();//打开台灯开关
            light.setLight(yellowbulb);//将黄灯泡放进台灯里面
            light.bulbPower();//打开台灯开关
        }
        
    }
    class Light{//台灯
        private Bulb bulb;//灯泡属性
        public Light(){}//构造方法
        public Bulb setLight(Bulb bulb){//修改灯泡的方法
            this.bulb = bulb;
            return bulb;
        }
        public void bulbPower(){//台灯开灯方法
            bulb.shine();//调用灯泡发光
        }
    }
    abstract class Bulb{//灯泡抽象类
        public abstract void shine();//抽象发光方法
    }
    class RedBulb extends Bulb{//红灯泡继承灯泡类
        public void shine(){//实现灯泡发光方法
            System.out.println("红灯发红光");
        }
    }
    class YellowBulb extends Bulb{
        public void shine(){
            System.out.println("黄灯发黄光");
        }
    }

    定一个形状类(shape)为抽象的,有两个方法求周长和求面积 为抽象的,它有三个子类,长方形,正方形,圆形,再定义 一个Student里面有一个学习的方法,

    要求在学习的方法里可 以调用任意形状的求周长和求面积的方法。

    package day18;
    
    
    public class  TestStudentt{//学生类
        public static void main(String[] args) {
            TestStudentt stu = new TestStudentt();//创建一个学生对象
            Shapee zfx = new Square(15.0);//创建一个正方形对象
            stu.count(zfx);
        }
        public void count(Shapee shape){//开始计算 此处有多态 Shapee shape = new Square(15);
            System.out.println("周长是"+shape.zhouChang());//调用求周长方法并且输出
            System.out.println("面积是"+shape.mianJi());//调用求面积方法并输出
        }
    }
    abstract class Shapee{//抽象类形状类
        public abstract double zhouChang();
        public abstract double mianJi();
    }
    class Square extends Shapee{//正方形类继承形状类
        private double bianChang;//成员变量边长
        public Square(){}//无参构造方法
        public Square(double bianChang){//有参构造方法
            this.bianChang = bianChang;
        }
        public double getBianChang(){//get方法
            return bianChang;
        }
        public double setBianChang(double bianChang){//方法
            this.bianChang = bianChang;
            return bianChang;
        }
        public double zhouChang(){//求周长方法
            double result = 4 * bianChang;
            return result;
        }
        public double mianJi(){//求面积方法
            double result = bianChang * bianChang;
            return result;
        }
    }
    class Cycle extends Shapee{//圆形类继承形状类
        private double banJin;
        public Cycle(){}
        public Cycle(double banJin){
            this.banJin = banJin;
        }
        public double getBanJin(){
            return banJin;
        }
        public double setBanJin(double banJin){
            this.banJin = banJin;
            return banJin;
        }
        public double zhouChang(){
            double result = 3.14 * 2 * banJin;
            return result;
        }
        public double mianJi(){
            double result = 3.14 * banJin * banJin;
            return result;
        }
    }
    class Rectanglee extends Shapee{//长方形类
        private double chang;
        private double kuan;
        public Rectanglee(){}
        public Rectanglee(double chang,double kuan){
            this.chang = chang;
            this.kuan = kuan;
        }
        public double getChang(){
            return chang;
        }
        public double setChang(double chang){
            this.chang = chang;
            return chang;
        }
        public double getKuan(){
            return kuan;
        }
        public double setKuan(double kaun){
            this.kuan = kuan;
            return kuan;
        }
        public double zhouChang(){
            double result = (chang + kuan) * 2;
            return result;
        }
        public double mianJi(){
            double result = chang * kuan;
            return result;
        }
    
    }
    以粮为纲全面发展
  • 相关阅读:
    start with connect by prior 递归查询用法(二)
    start with connect by prior 递归查询用法(一)
    oracle之spool详细使用总结
    关于ETL面试相关
    ETL常用的三种工具介绍及对比Datastage,Informatica和Kettle
    Oracle执行计划详解
    随机函数的使用(DBMS_RANDOM)
    oracle中的替换函数replace和translate函数
    ces
    文章11
  • 原文地址:https://www.cnblogs.com/alexliuf/p/13198499.html
Copyright © 2011-2022 走看看