posts - 44, comments - 269, trackbacks - 22, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

      
      星期天
,去看看我媽,在一個十字路口堵車差不多一個小時,真是鬱悶.心里想著,這里要是有座立交橋就好了,車輛便可以分流.想著想著,這些車輛彷彿變成了我們Developing系統中的數據流.

我們平時有用到的Switch,現在看來,它就是這"米"字路口,記得剛開始Code的時候,特別喜歡用它.覺得幾種情況羅列在這裡,很清晰.看看下面的代碼:

Class Dog

{

        private string A_name;

        private string B_name;

        public Dog {};

        public string GetAname()

        {            

                return A_name;         

}

public string GetBname()

        {            

                return B_name;          

}

public string getName(string dogType)

{

                Switch(dogType)

                        {

                                case “A”:

                                        dogName =GetAname();

                                        break;

case “B”:

                                        dogName =GetBname ();

                                        break;

                                default:

                                        dogName = “There is not the “+ dogNameSequence +” sequence !”;

break;

}

 

}

 

}

class do

{

        public do{};

        static void Main (string[] args)

        {

                //I want to get the name of the type A;

                string dogAName;

                Dog dog = new Dog();

   dogAName = dog. GetName(“A”);

       

}

}

這樣的話,對每個Sequence都是需要判斷,遍歷一次.在看看下面的代碼:

abstract class Dog

{

public string DogName;

}

class A : Dog

{

        private string A_name;

        public string DogName

{

        get

        {

                return A_name;

}

}

}

class B : Dog

{

        private string B_name;

        public string DogName

{

        get

        {

                return B_name;

}

}

}

class do

{

        public do{};

        static void Main (string[] args)

        {

                //I want to get the name of the type A;

                string dogAName;

                Dog dog = new A();

   dogAName = dog.DogName;     

}

}

      很顯然這個就相當於是架起了一座天橋,雖然耗了點成本”,但是大大提高了執行的效率.這篇文章涉及到的設計模式可能有點膚淺 , 希望后續能和兄弟們共同探討更好更靈活便捷的設計模式.

Feedback

#1楼    回复  引用    

2006-05-16 10:16 by bisou.cn [未注册用户]
在ie7下浏览这个页面怎么这么丑啊

字都看不清楚 全部模糊 放大也不行

#2楼 [楼主]   回复  引用  查看    

2006-05-16 10:51 by 自適應軟件......      
哦??我改一下,對不起啊!

#3楼 [楼主]   回复  引用  查看    

2006-05-16 10:53 by 自適應軟件......      
你在看看?要不就是Ie7還有很多Bug...

#4楼    回复  引用  查看    

2006-05-16 14:48 by 维生素C.NET      
高度的抽象可以提高程序的效率

#5楼 [楼主]   回复  引用  查看    

2006-05-16 17:04 by 自適應軟件......      
啊,樓上的兄弟說我寫的東西太抽象了嗎?

#6楼    回复  引用  查看    

2006-05-17 10:08 by 维生素C.NET      
@自適應軟件......
不是不是.......

#7楼    回复  引用  查看    

2006-05-17 11:05 by Sumtec      
这两个例子的性能估计可能不会相差太大,因为C#的switch实际上是查表的,不是一大堆的判断语句。

#8楼    回复  引用  查看    

2006-05-17 11:32 by henry      
很顯然這個就相當於是架起了一座天橋,雖然耗了點”成本”,但是大大提高了執行的效率.
搞不懂我所了解的是,效率应该不会高很多.
但对程序的扩展和维护都很方便,既然方便成本应该有所降低才是.
当然程序不用扩展和维护例外,但现实中应该不太可能.

#9楼 [楼主]   回复  引用  查看    

2006-05-17 13:11 by 自適應軟件......      
To :Sumtec , henry

這個例子是我沒有選好,我想表達的意思是,Coding代碼的過程中也有像"米"字型的路口.我想請問一下,你們覺得這類型的問題有嗎?能舉一兩個例子嗎?我現在在研究設計模式,往往能夠套上生活中的一些實例,但是模型好像又不清晰!

#10楼    回复  引用  查看    

2006-05-17 13:46 by henry      
@自適應軟件......
通过对象的多态解决这些问题在现实中很常见,基于Switch这样的方式常常违反那什么什么封闭原则(忘了名称,模式这东西我很少看书去理解,通常都是重构代码过程中掌握);这些模式在.NET内部类库中也有大量使用.
如:System.IO.TextWriter
public void Write(TextWriter writer,string value)
{
writer.Write(value);
}
实际上方法是不用关心writer的具体类型.
System.IO.StreamWriter
System.IO.StringWriter
System.Web.HttpWriter
System.Web.UI.HtmlTextWriter

#11楼 [楼主]   回复  引用  查看    

2006-05-17 14:23 by 自適應軟件......      
你這種是比較經典的參數型的代碼重構!好像不是多態哦?用的較多的有Interface 和 abstract ,先看看這個abstract的實現:
public abstract class AbsBaseClass
{
public abstract void Say();
}

public class A : AbsBaseClass
{
public override void Say()
{
System.Console.WriteLine("Hello world A!");
}

public static void nowSay(AbsBaseClass obj)
{
obj.Say();
}
}


class Class1
{

[STAThread]
static void Main(string[] args)
{
A _obj = new A();
A.nowSay(_obj);
Console.Read();
}
}

the output : Hello world A!

#12楼    回复  引用  查看    

2006-05-17 15:04 by henry      
@自適應軟件......
其实TextWriter 本身就是一个抽象体,通过抽象的隔离你不用关心writer.Write方法具体要做事件,如果没有这种隔离性你就要Switch来判断是写文件还是操作内存流等操作.
模式很多时候也是结合来使用的.

#13楼 [楼主]   回复  引用  查看    

2006-05-17 15:27 by 自適應軟件......      
模式很多时候也是结合来使用的

這點我非常贊同,不過我還是要把每種模式理解了,體會了他的思想,這樣使用的時候會不知不覺的結合.

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-05-16 10:52 编辑过


相关链接: