加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

设计模式之依赖倒置原则

发布时间:2020-12-14 02:10:03 所属栏目:百科 来源:网络整理
导读:设计模式之依赖倒置原则 高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。 抽象不应该依赖于具体实现,具体实现应该依赖于抽象。 依赖倒置原则是程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编

设计模式之依赖倒置原则

高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。
抽象不应该依赖于具体实现,具体实现应该依赖于抽象。


依赖倒置原则是程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。

public class HondaCar{
    public void Run(){
        Console.WriteLine("本田开始启动了");
    }
    public void Turn(){
        Console.WriteLine("本田开始转弯了");
    }
    public void Stop(){
        Console.WriteLine("本田开始停车了");
    }
}
public class FordCar{
    publicvoidRun(){
        Console.WriteLine("福特开始启动了");
    }
    publicvoidTurn(){
        Console.WriteLine("福特开始转弯了");
    }
    publicvoidStop(){
        Console.WriteLine("福特开始停车了");
    }
}
public class AutoSystem{
    public enum CarType{
        Ford,Honda
    };
    private HondaCar hcar=new HondaCar();
    private FordCar fcar=new FordCar();
    private CarType type;
    public AutoSystem(CarType type){
        this.type=type;
    }
    private void RunCar(){
        if(type==CarType.Ford){
            fcar.Run();
        } else {
            hcar.Run();
        }
    }
    private void TurnCar(){
        if(type==CarType.Ford){
            fcar.Turn();
        } else { 
            hcar.Turn();
        }
    }
    private void StopCar(){
        if(type==CarType.Ford){
            fcar.Stop();
            } else {
                hcar.Stop();
            }
    }
}

上面的程序确实能够实现针对Ford和Honda车的无人驾驶,但是软件是在不断变化的,软件的需求也在不断的变化。这会给系统增加新的相互依赖。随着时间的推移,越来越多的车种必须加入到AutoSystem中,这个“AutoSystem”模块将会被if/else语句弄得很乱,而且依赖于很多的低层模块,只要低层模块发生变动,AutoSystem就必须跟着变动。导致上面所述问题的一个原因是,含有高层策略的模块,如AutoSystem模块,依赖于它所控制的低层的具体细节的模块(如HondaCar()和FordCar())。如果我们能够找到一种方法使AutoSystem模块独立于它所控制的具体细节,那么我们就可以自由地复用它了。我们就可以用这个模块来生成其它的程序,使得系统能够用在需要的汽车上。


public interface ICar
{
	void Run();
	void Turn();
	void Stop();
}

public class BmwCar:ICar
{
	public void Run()
	{
		Console.WriteLine("宝马开始启动了");
	}
	public void Turn()
	{
		Console.WriteLine("宝马开始转弯了");
	}
	public void Stop()
	{
		Console.WriteLine("宝马开始停车了");
	}
}

public class FordCar:ICar
{
	publicvoidRun()
	{
		Console.WriteLine("福特开始启动了");	
	}
	public void Turn()
	{
		Console.WriteLine("福特开始转弯了");
	}
	public void Stop()
	{
		Console.WriteLine("福特开始停车了");
	}
}

public class HondaCar:ICar
{
	publicvoidRun()
	{
		Console.WriteLine("本田开始启动了");
	}
	public void Turn()
	{
		Console.WriteLine("本田开始转弯了");
	}
	public void Stop()
	{
		Console.WriteLine("本田开始停车了");
	}
}

public class AutoSystem
{
	private ICar icar;
	public AutoSystem(ICar icar)
	{
		this.icar=icar;
	}
	private void RunCar()
	{
		icar.Run();
	}
	private void TurnCar()
	{
		icar.Turn();
	}
	private void StopCar()
	{
		icar.Stop();
	}
}


=======================================================================

结束。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读