Readonly Version模式

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

 

该模式的应用场景:

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

 

实现要点:

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

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

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

 

其实现的类图:
class.png

代码实现:

None.gifpublic class ClassA
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif{
InBlock.gif        
public static ClassA Readonly(ClassA instance)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
return new ReadonlyClassA(instance);
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
private string _name;
InBlock.gif
InBlock.gif        
public virtual string Name
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif            
get dot.gifreturn _name; }
ExpandedSubBlockStart.gifContractedSubBlock.gif            
set dot.gif{ _name = value; }
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
private class ReadonlyClassA : ClassA
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
private ClassA _classA;
InBlock.gif
InBlock.gif            
public ReadonlyClassA(ClassA classA)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif
InBlock.gif                _classA 
= classA;
ExpandedSubBlockEnd.gif            }

InBlock.gif
InBlock.gif            
public override string Name
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
get
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    
return _classA.Name;
ExpandedSubBlockEnd.gif                }

InBlock.gif                
set
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    
throw new NotSupportedException("不支持指定操作。");
ExpandedSubBlockEnd.gif                }

ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

ExpandedBlockEnd.gif}

None.gif


优点:

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

 

缺点:

…….

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值