面向对象设计与分析的一个小问题.
本人菜鸟,说错了的,请指教.
一个很简单的功能,但是要遵循面向对象原则,现在能实现的是按下按钮,如果门是开的,则关上,如果是关的,则打开,但是现在需要这样:"门是开的,则关上,如果是关的,则打开"这里相同,但是,打开门口,隔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吧,这样好像就违反了面向对象设计原则...就大虾指教啊,.!