[转载]两道程序设计题

 文章来源:http://www.cnblogs.com/lxinxuan/archive/2007/06/18/788299.html

 

题目:程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#语言)

要求:
1.要有联动性,老鼠和主人的行为是被动的。

2.考虑可扩展性,猫的叫声可能引起其他联动效应

设计方法一:
public interface Observer 

void Response(); //观察者的响应,如是老鼠见到猫的反映 
}
 
public interface Subject 

void AimAt(Observer obs); //针对哪些观察者,这里指猫的要扑捉的对象---老鼠 
}
 
public class Mouse : Observer 

private string name; 
public Mouse(string name, Subject subj) 

this.name = name; 
subj.AimAt(
this); 
}
 

public void Response() 

Console.WriteLine(name 
+ " attempt to escape!"); 
}
 
}
 
public class Master : Observer 

public Master(Subject subj) 

subj.AimAt(
this); 
}
 

public void Response() 

Console.WriteLine(
"Host waken!"); 
}
 
}
 

public class Cat : Subject 

private ArrayList observers; 
public Cat() 

this.observers = new ArrayList(); 
}
 
public void AimAt(Observer obs) 

this.observers.Add(obs); 
}
 
public void Cry() 

Console.WriteLine(
"Cat cryed!"); 
foreach (Observer obs in this.observers) 

obs.Response(); 
}
 
}
 
}
 
class MainClass 

static void Main(string[] args) 

Cat cat 
= new Cat(); 
Mouse mouse1 
= new Mouse("mouse1", cat); 
Mouse mouse2 
= new Mouse("mouse2", cat); 
Master master 
= new Master(cat); 
cat.Cry(); 
}
 
}
 

设计方法二: 使用event -- delegate设计
class Class1
    
{
        
static void Main(string[] args)
        
{
            Cat cat 
= new Cat();
            Mouse mouse 
= new Mouse(cat);
            Master master 
= new Master(cat);

            cat.Cry();
            Console.ReadLine();
        }

    }


    
public delegate void SubEventHandle();
    
public class SubObject
    

        
public event SubEventHandle SubEvent;

        
public void FireEvent()
        
{
            
this.SubEvent();
        }

    }


    
public class Cat : SubObject
    
{

        
public void Cry()
        
{
            Console.Write(
"Cat Cries.");
            
this.FireEvent();
        }

    }


    
public abstract class Observer
    
{
        
public Observer(SubObject subObj)
        
{
            subObj.SubEvent 
+= new SubEventHandle(Response);
        }

        
public abstract void Response();
    }


    
public class Mouse : Observer
    
{
        
public Mouse(SubObject subObj)
            : 
base(subObj)
        
{
        }


        
public override void Response()
        
{
            Console.Write(
"Mouse escapes.");
        }

    }


    
public class Master : Observer
    
{
        
public Master(Cat cat)
            : 
base(cat)
        
{
        }

        
public override void Response()
        
{
            Console.Write(
"Master Weaks.");
        }

    }

2、以下输出结果?
    public class A
    
{
        
public virtual void Fun1(int i)
        
{
            Console.WriteLine(i);
        }


        
public void Fun2(A a)
        
{
            a.Fun1(
1);
            Fun1(
5);
        }

    }

    
public class B : A
    
{
        
public override void Fun1(int i)
        
{
            
base.Fun1(i + 1);
        }


        
public static void Main()
        
{
            B b 
= new B();
            A a 
= new A();
            a.Fun2(b);
            b.Fun2(a);
            Console.ReadLine();
        }

    }
答案:
2
5
1
6

3、以下输出结果?
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    
public class Program
    
{
        
static void Main(string[] args)
        
{
            test t1 
= new test();
            test t2 
= new test();
            Console.Write(t2.Count);
            Console.ReadLine();
        }

    }


    
public class test
    
{
        
static int count = 0;

        
static test()
        
{
            count
++;
        }


        
public test()
        
{
            count
++;
        }


        
public int Count
        
{
            
get return count; }
        }

    }

}
答案:3
posted @ 2007-06-18 23:19  rangeliu  阅读(162)  评论(0编辑  收藏  举报