设计方式初探(三)——结构:因为它简单,也因为他美丽
设计模式初探(三)——结构:因为它简单,也因为他美丽
一个好的程序,有一个公用标准,叫高内聚,低耦合,但是,这是一个度的把握,再高的内聚性也避免不了沟通和交际,一味地抽象,继承是不科学的,我们应该寻找一种更好地解决方法,恰恰在这类设计模式,前人已经替我们做好了铺垫。
结构?什么是结构,在建筑上是承重的部分,意思就是骨架,只有支好一个好的骨架,才能让我们更有效的工作,在面向对象的设计中,类是一根根骨头,将这些东西连接起来的是“关系”,怎么处理这些关系是我们现在这种设计模式要学习的!
还是老样子,具体的例子大家去看书就ok,这里咱们谈谈扩展的两种知识:
一:聚合和组合(或者称为合成)
聚合,是种较弱的关系,例如足球场和观众,就是聚合的关系,他们互相独立,有一场足球赛的时候,他们才聚合到一起。
组合,是种较强的关系,例如人与四肢,人和四肢是不可分割的一部分,他们不以意志转移为转移。
再编程中,这两种关系帮助我们拜托了过多继承带来的困扰!
具体应用:
聚合
//抽象软件 abstract class Soft { public abstract void Run(); } //游戏 class Game : Soft { public override void Run() { Console.WriteLine ("运行手机游戏!"); } } //通讯录 class AdressList : Soft { public override void Run() { Console.WriteLine ("运行手机通讯录!"); } } //抽象品牌 abstract class Brand { protected Soft soft; //设置软件 public void SetSoft(Soft soft) { this.soft = soft; } public abstract void Run(); } //品牌N class BrandN : Brand { public override void Run() { soft .Run (); } } //品牌M class BrandM : Brand { public override void Run() { soft.Run (); } }
二:Hashtable
它的中文名字叫哈希表,他是通过key值来控制存入其中的对象,它是种容器,能够方便检索,快速查找,简单的理解就是这样,我们来看看应用
using System; using System.Collections; //使用Hashtable时,必须引入这个命名空间 class hashtable { public static void Main() { Hashtable ht=new Hashtable(); //创建一个Hashtable实例 //key值唯一,value值可以重复. ht.Add("E","e");//添加key/键值对 ht.Add("A","a"); ht.Add("C","c"); ht.Add("B","b"); string s=(string)ht["A"]; if(ht.Contains("E")) //判断哈希表是否包含特定键,其返回值为true或false Console.WriteLine("the E key:exist"); ht.Remove("C");//移除一个key/键值对 Console.WriteLine(ht["A"]);//此处输出a ht.Clear();//移除所有元素 Console.WriteLine(ht["A"]); //此处将不会有任何输出 } }
设计模式的两种类型问题,已经有相对较好的解答,在下一篇博客里我们一起来看看,拥有模式最多的行为模式类型!