首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

面向对象设计与分析的一个小疑点

2012-12-18 
面向对象设计与分析的一个小问题.本人菜鸟,说错了的,请指教.一个很简单的功能,但是要遵循面向对象原则,现

面向对象设计与分析的一个小问题.
本人菜鸟,说错了的,请指教.

一个很简单的功能,但是要遵循面向对象原则,现在能实现的是按下按钮,如果门是开的,则关上,如果是关的,则打开,但是现在需要这样:"门是开的,则关上,如果是关的,则打开"这里相同,但是,打开门口,隔10秒,门会自动关闭,.!

一下是现功能代码,表达的不是很好,.
DogDoor.cs:
namespace DogDoor
{
    public class DogDoor
    {
        public static Boolean open;

        public DogDoor()
        {
            //
        }

        public bool toOpen()
        {
            open = true;
            return open;
        }
        public bool toClose()
        {
            open = false;
            return open;
        }
        public Boolean isOpen()
        {
            return open;
        }
    }
}
Remote.cs:
public class Remote
    {
        private DogDoor door;

        public Remote(DogDoor door)
        {
            this.door = door;
        }

        public bool pressButton()
        {
            
            if (door.isOpen() == true)
            {
                return this.door.toClose();
                
            }
            else
            {
                return this.door.toOpen();
            }
        }
    }
下面是页面代码:
public partial class DoorTest : System.Web.UI.Page
    {
        DogDoor door = new DogDoor();

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {


                DogDoor.open = true;
            }
        }

        protected void btnDoor_Click(object sender, EventArgs e)
        {
            Remote remote = new Remote(door);
            Response.Write(remote.pressButton());
       }
    }
[最优解释]
class A
{
    public A(){}
    public virtual void OpenDoor(){开门}
    public void CloseDoor(){关门}
}
class B:A
{
   public override void OpenDoor()
   {
      base.OpenDoor();
      Thread.Sleep(1000);
      base.CloseDoor();
   }
}
[其他解释]
这种简单的用Timer是最好的,开门就开启Timer,10秒后也自动关了Timer

用线程也可以。
[其他解释]
可以用Timeer,或者加个Opened事件采用委托的方式
[其他解释]
class Door
    {
        public static  bool flag;//true 表示打开 false 表示关闭
        public static void OpenDoor()
        {
            Console.WriteLine("open the door!");
            Door.flag = true;
                Timer time = new Timer(new TimerCallback(CloseDoor), null, 10000, 0);
        }
        public static void CloseDoor(object o)
        {
            Console.WriteLine("close the door!");
            Door.flag = false;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Door.flag = false;
            while (true)
            {
                if (Door.flag == true)
                {
                    Door.CloseDoor(null);


                }
                else
                {
                    Door.OpenDoor();
                }
                Console.ReadLine();
            }
        }
    }
[其他解释]
用线程或者Timer
[其他解释]
楼上两个方法都没用的啊,我要求实现的是(比如):点下按钮,页面上显示的是"狗门已开",十秒后,页面然后显示成"狗门已关",.但是页面上总不能用个Timer吧,这样好像就违反了面向对象设计原则...就大虾指教啊,.!

热点排行