亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

設計模式之美:Dynamic Property(動態屬性)

標簽:
架構

索引

  • 别名

  • 意图

  • 结构

  • 参与者

  • 适用性

  • 效果

  • 实现

    • 实现方式(一):Dynamic Property 的示例实现。

别名

  • Property

  • Properties

  • Property List

意图

使对象可以为客户提供广泛且可扩展的属性集合。

Lets an object provides a generic and extensible set of properties to clients.

结构

参与者

Object

  • 目标对象可存储 Property 列表。

  • 可使用不同的类型来作为 Property 的标识符,最简单的可以使用 string 类型。

Property

  • 属性定义。

适用性

当以下情况成立时可以使用 Dynamic Property 模式:

  • 当对象需要定义大量属性时。

  • 当对象的属性是运行时可变时。

效果

  • 可在运行时动态的修改对象的属性。

实现

实现方式(一):Dynamic Property 的示例实现。

复制代码

  1 namespace DynamicPropertyPattern.Implementation1  2 {  3   public class Person  4   {  5     private PropertyList _properties = new PropertyList(null);  6   7     public Property GetProperty(string propertyName)  8     {  9       return _properties.GetProperty(propertyName); 10     } 11  12     public bool HasProperty(string propertyName) 13     { 14       return _properties.HasProperty(propertyName); 15     } 16  17     public void AddProperty(string propertyName, Property property) 18     { 19       _properties.AddProperty(propertyName, property); 20     } 21  22     public void RemoveProperty(string propertyName) 23     { 24       _properties.RemoveProperty(propertyName); 25     } 26  27     public IEnumerable<Property> GetAllProperties() 28     { 29       return _properties.GetAllProperties(); 30     } 31   } 32  33   public class Property 34   { 35     public string Name { get; set; } 36     public string Value { get; set; } 37   } 38  39   public class PropertyList 40   { 41     private PropertyList _parent; 42     private Dictionary<string, Property> _properties 43       = new Dictionary<string, Property>(); 44  45     public PropertyList(PropertyList parent) 46     { 47       _parent = parent; 48     } 49  50     public PropertyList Parent 51     { 52       get 53       { 54         return _parent; 55       } 56     } 57  58     public Property GetProperty(string propertyName) 59     { 60       if (_properties.ContainsKey(propertyName)) 61         return _properties[propertyName]; 62       if (_parent != null && _parent.HasProperty(propertyName)) 63         return _parent.GetProperty(propertyName); 64       return null; 65     } 66  67     public bool HasProperty(string propertyName) 68     { 69       return (_properties.ContainsKey(propertyName)) 70         || (_parent != null && _parent.HasProperty(propertyName)); 71     } 72  73     public void AddProperty(string propertyName, Property property) 74     { 75       _properties.Add(propertyName, property); 76     } 77  78     public void RemoveProperty(string propertyName) 79     { 80       _properties.Remove(propertyName); 81     } 82  83     public IEnumerable<Property> GetAllProperties() 84     { 85       List<Property> properties = new List<Property>(); 86  87       if (_parent != null) 88         properties.AddRange(_parent.GetAllProperties()); 89  90       properties.AddRange(_properties.Values); 91  92       return properties; 93     } 94   } 95  96   public class Client 97   { 98     public void TestCase1() 99     {100       Person dennis = new Person();101       dennis.AddProperty("Contact", new Property() { Name = "Contact", Value = "Beijing" });102       dennis.AddProperty("Age", new Property() { Name = "Age", Value = "18" });103       dennis.AddProperty("Gender", new Property() { Name = "Gender", Value = "Male" });104 105       if (dennis.HasProperty("Contact"))106       {107         Property property = dennis.GetProperty("Contact");108       }109     }110   }111 }

复制代码

《设计模式之美》为 Dennis Gao 发布于博客园的系列文章,任何未经作者本人同意的人为或爬虫转载均为耍流氓。

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消