设计模式学习笔记之 Adapter 

     Adapter模式是一种结构型模式,它的作用在于转换类的接口,使一些不兼容的类可以相互兼容工作。这种结构在我们平时的工作经常会被用到,是一种应用很普遍的模式。

     用我们身边的例子来说打比方,就好像一个三向插头不能插到双向的插座里一样,而Adapter就相当于有三向插头的接线板。

     现在用户需要的接口是

interface IElec
{
        
public object 火线();
        
public object 地线();
        
public object 零线();
}

     而我们的电源类是这样的

class ElecSource
{
        
private object 火线;
        
private object 零线;
        
public object Get火线
         
{
            
get
            
{
                
return 火线;
            }

        }

        
public object Get零线
         
{
            
get
            
{
                
return 零线;
            }

        }

        
//初始化工作略
}


     为了能让他们可以兼容工作,我们写Adapter如下:

class Adapter : IElec
{
        ElecSource elecSource 
= new ElecSource();
        
public object 火线()
        
{
            
return elecSource.Get火线;
        }

        
public object Get零线()
        
{
            
return elecSource.零线;
        }

        
public object 地线()
        
{
            
return Getobject();  //瞎编的.
        }

}


     这种Adapter称为对象适配器,使用对象的组合来达到适配的目的。上面例子中Adapter类中就包含了elecSource对象。除此之外,还有一种类适配器,结构如下:

class Adapter:ElecSource,IElec
{
        
public object 火线()
        
{
            
return this.Get火线;
        }

        
public object 地线()
        
{
            
return Getobject();
        }

        
public object 零线()
        
{
            
return this.Get零线;
        }

}


     这里适配器继承了ElecSource类和IElec接口,不需要在Adapter中创建ElecSource对象。但是这样做使得Adapter继承了ElecSource的全部公有的方法和属性,使得他们的功能相重复了,违反了类的单一职责的原则。而且在复杂情况下,例如在适配器中需要同时使用两个以上的适配对象时,因为C#不支持多继承,就难以实现类适配器了。 

参考: MSDNWebCast C#设计模式纵横谈    李建忠

     回到目录


posted on 2006-09-10 16:55  aiya  阅读(277)  评论(0)    收藏  举报