设计模式之依赖倒置原则

前端之家收集整理的这篇文章主要介绍了设计模式之依赖倒置原则前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

设计模式之依赖倒置原则

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


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

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();
	}
}


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

结束。

原文链接:https://www.f2er.com/javaschema/283671.html

猜你在找的设计模式相关文章