• 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("不支持指定操作。");
                    }

                }

            }

    }


    优点:

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

     

    缺点:

    …….

     

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

  • 相关阅读:
    原生JS---2
    PHP中include和require绝对路径、相对路径问题
    魔方(小玩具)
    html5技术介绍
    苹果电脑 快捷键
    写代码的心得,怎么减少编程中的 bug?
    http状态代码含义表
    开源项目
    蓝牙 CoreBluetooth
    减小iOS应用程序的大小
  • 原文地址:https://www.cnblogs.com/yukaizhao/p/readonly_version_pattern.html
Copyright © 2020-2023  润新知