夜光带你走进 Java 成神之路(五)擅长的领域

夜光序言:

 

人生是美好的,它不是冬天里的寒气伤心,它而是春暖花开的季节。

 

 

 

 

 

 

 

 

 

 

 

正文:

                           以道御术 / 以术识道

 

package 依赖倒转原则;

public class DependecyPass {
    public static void main(String[] args) {

        //我们先new两个对象出来~
        ChangHong ch = new ChangHong();
        OpenAndClose openAndClose = new OpenAndClose();
        openAndClose.Open(ch);

    }
}

class ChangHong implements ITV{
    @Override
    public void play() {
        System.out.println("电视机已经打开");
    }
}


//方式1:通过接口传递实现依赖
//开关的接口
interface IOpenAndClose{
    public void Open(ITV tv);  //抽象方法,接收接口
}
//ITV接口
interface ITV{
    public void play();
}
//实现接口
class OpenAndClose implements IOpenAndClose{
    @Override
    public void Open(ITV tv){
        tv.play();
    }
}

//-------------------------------------------------------------------

/*
//第二种方式,夜光
//方式2:通过构造方法依赖传递
interface IOpenAndClose{
    public void Open();  //抽象方法
}
interface ITV{  //ITV接口
    public void play();
}
class OpenAndClose implements IOpenAndClose{
    public ITV tv;

    public OpenAndClose(ITV tv){
        this.tv = tv;
    }
    @Override
    public void Open(){
        this.tv.play();
    }
}*/


//-----------------------------------------------------------------

//方式3:






 

 

package 依赖倒转原则;

public class DependecyPass {
    public static void main(String[] args) {

        //我们先new两个对象出来~
        ChangHong ch = new ChangHong();
/*        OpenAndClose openAndClose = new OpenAndClose();
        openAndClose.Open(ch);*/

        //通过构造器进行依赖传递
        OpenAndClose openAndClose = new OpenAndClose(ch);
        openAndClose.Open();

    }
}

class ChangHong implements ITV{
    @Override
    public void play() {
        System.out.println("电视机已经打开");
    }
}


/*//方式1:通过接口传递实现依赖
//开关的接口
interface IOpenAndClose{
    public void Open(ITV tv);  //抽象方法,接收接口
}
//ITV接口
interface ITV{
    public void play();
}
//实现接口
class OpenAndClose implements IOpenAndClose{
    @Override
    public void Open(ITV tv){
        tv.play();
    }
}*/

//-------------------------------------------------------------------

//第二种方式,夜光
//方式2:通过构造方法依赖传递
interface IOpenAndClose{
    public void Open();  //抽象方法
}
interface ITV{  //ITV接口
    public void play();
}
class OpenAndClose implements IOpenAndClose{
    public ITV tv;

    public OpenAndClose(ITV tv){
        this.tv = tv;
    }
    @Override
    public void Open(){
        this.tv.play();
    }
}


//-----------------------------------------------------------------

//方式3:






 

 

 

 

package 里氏替换原则;

public class LisKov {
    public static void main(String[] args) {
        A a = new A();
        System.out.println("11-3=" + a.func1(11,3));

        System.out.println("-------------------------------");
        B b = new B();
        System.out.println(b.func1(11,3));
        System.out.println(b.func2(11,1));
    }
}

//写一个A类
class A{
    public int func1(int num1,int num2){
          return num1 - num2;  //返回两个数的差
    }
}

//再写一个B类
//B继承了A
//增加了一个新功能,完成两个数相加,并和9求和
class B extends A{
    @Override
    public int func1(int a,int b){
        return a + b;
    }
    public int func2(int a,int b){
        return func1(a,b) + 9;
    }
}








 

 

 

package 里氏替换原则.优化;

//夜光:我们改进一下
public class LisKovImprove {
    public static void main(String[] args) {
        A a = new A();
        System.out.println("11-3=" + a.func1(11,3));

        System.out.println("-------------------------------");
        B b = new B();
        System.out.println(b.func1(11,3));
        System.out.println(b.func2(11,1));
        System.out.println("11-3:" + b.func3(11,3));
    }
}

//优化:创建一个更加基础的基类
class Base{
    //把更加基础的方法和成员写到base里面




}





//写一个A类
class A extends Base{
    public int func1(int num1,int num2){
        return num1 - num2;  //返回两个数的差
    }
}

//再写一个B类
//B继承了A
//增加了一个新功能,完成两个数相加,并和9求和
class B extends Base{
    //如果B想要使用A的方法,我们使用组合
    private A a = new A();  //画重点
 /*   @Override //这个方法无意中重写了父类的方法func1,造成了错误*/
    //通用的做法是:原来的父类和子类都继承一个更通俗的基类,原有的继承关系去掉
    //采用依赖,聚合,组合关系来代替
    public int func1(int a,int b){
        return a + b;
    }
    public int func2(int a,int b){
        return func1(a,b) + 9;
    }

    //如果我们想要使用A的方法,可以使用里氏替换原则的组合
    public int func3(int a,int b){
        return this.a.func1(a,b);  //this.a 指向 private A a = new A();  //画重点
    }

}


 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值