Readonly Version模式

不知道大家有没有注意到ArrayList类有一个静态方法Readonly它只有一个类型为ArrayList的参数,并且返回值也是一个ArrayList,他的作用是返回某个ArrayList实例的只读版本。我把类似完成这种功能的一种设计称作Readonly Version模式。不知道有没有别人提出过,如果没有就是我第一个提出,^_^

 

该模式的应用场景:

类在某些应用场合不能修改成员值,即某些时候需要获得类实例的只读版本

 

实现要点:

1.       ClassA有一个静态方法Readonly;此静态方法有一个ClassA的参数并返回该类型;

2.       ClassA有一个私有的内嵌类ReadonlyClassA,从ClassA继承,ReadonlyClassA有一个只有一个参数为ClassA的构造函数。

3.       ReadonlyClassA重写所有方法,对于不改变实例成员值得方法,直接返回值,而对于会改变成员值得方法抛出NotSupportException异常

 

其实现的类图:

代码实现:

public class ClassA
    
{
        
public static ClassA Readonly(ClassA instance)
        
{
            
return new ReadonlyClassA(instance);
        }


        
private string _name;

        
public virtual string Name
        
{
            
get return _name; }
            
set { _name = value; }
        }


        
private class ReadonlyClassA : ClassA
        
{
            
private ClassA _classA;

            
public ReadonlyClassA(ClassA classA)
            

                _classA 
= classA;
            }


            
public override string Name
            
{
                
get
                
{
                    
return _classA.Name;
                }

                
set
                
{
                    
throw new NotSupportedException("不支持指定操作。");
                }

            }

        }

}


优点:

可以隐藏只读版本类的实现,而对外统一了只读版本和一般类的接口

 

缺点:

…….

 

第一次写设计模式的文章,那儿不对的请各位指正。

posted @ 2007-04-09 08:45  玉开  阅读(2704)  评论(21编辑  收藏  举报