using System; 
using System.Collections.Generic; 
using System.Text; 
  
namespace DISimple 

    class Program 
    { 
        static void Main(string[] args) 
        { 
            InputAccept accept = new InputAccept(new PromptDataProcessor()); 
            accept.Execute(); 
            Console.ReadLine(); 
        } 
    } 
  
    public class InputAccept 
    { 
        private IDataProcessor _dataProcessor; 
  
        public void Execute() 
        { 
            Console.Write("Please Input some words:"); 
            string input = Console.ReadLine(); 
            input = _dataProcessor.ProcessData(input); 
            Console.WriteLine(input); 
        } 
  
        public InputAccept(IDataProcessor dataProcessor) 
        { 
            _dataProcessor = dataProcessor; 
        } 
    } 
  
    public interface IDataProcessor 
    { 
        string ProcessData(string input); 
    } 
  
    public class DummyDataProcessor : IDataProcessor 
    { 
  
        #region IDataProcessor Members 
  
        public string ProcessData(string input) 
        { 
            return input; 
        } 
  
        #endregion 
    } 
  
    public class PromptDataProcessor : IDataProcessor 
    { 
        #region IDataProcessor Members 
  
        public string ProcessData(string input) 
        { 
            return "your input is: " + input; 
        } 
  
        #endregion 
    } 
}
上述代码为转载:
注解如下:
这是一个简单且无用的例子,但却可以告诉我们为何要使用Dependency Injection,在这个例子中,必须在建立InputAccept对象时传入一 个实现IDataProcessor接口的对象,这是Interface Base Programming概念的设计模式,这样做的目的是为了降低InputAccept与实现对象间的耦合关系,重用InputAccept的执行流程,以此来增加程序的延展性。
中间说到实现IDataProcessor接口对象,是降低InputAccept与实现对象间的耦合关系,可是我没怎么看出降低了耦合关系。
各位能否帮忙解答下!

解决方案 »

  1.   

    中间说到实现IDataProcessor接口对象,是降低InputAccept与实现对象间的耦合关系,可是我没怎么看出降低了耦合关系。 IDataProcessor dp = null;
    dp = new DummyDataProcessor();
    dp = new PromptDataProcessor();通过接口IDataProcessor 我可以传入DummyDataProcessor对象的引用
    也可以传入PromptDataProcessor对象的引用,,这样就是降低了耦合。好处是,不依赖于具体的某个对象。。如果你不使用接口而是用某具体类的话,就只能传递该类的对象明白了么