单例模式并非经常使用的设计模式。
这种封装减少了外观类与详细类的耦合。
/// <summary>
/// 封装用户输入
/// </summary>
public class Input
{
private Input() { }
/// <summary>
/// 用户输入实例
/// </summary>
private static Input _instance;
/// <summary>
/// 获取封装用户输入的唯一实例
/// </summary>
public static Input Instance
{
get
{
if (_instance == null)
{
_instance = new Input();
}
return _instance;
}
}
/// <summary>
/// 绑定到窗口
/// </summary>
/// <param name="window">对应用户输入的窗口</param>
public void BindingToForm(Form window)
{
KeyBoard = new KeyBoard(window);
}
/// <summary>
/// 获取或设置键盘输入状态
/// </summary>
public KeyBoard KeyBoard { get; private set; }
/// <summary>
/// 更新输入状态
/// </summary>
public void Update()
{
KeyBoard.Process();
}
} /// <summary>
/// 封装用户输入
/// </summary>
public class Input
{
/// <summary>
/// 绑定到窗口
/// </summary>
/// <param name="window">对应用户输入的窗口</param>
public void BindingToForm(Form window)
{
KeyBoard = new KeyBoard(window);
}
/// <summary>
/// 获取或设置键盘输入状态
/// </summary>
public KeyBoard KeyBoard { get; private set; }
/// <summary>
/// 更新输入状态
/// </summary>
public void Update()
{
KeyBoard.Process();
}
} class SpaceShip
{
Input _input;
public SpaceShip(Input input)
{
this._input = input;
}
public Vector MoveDirection { get; set; }
private Vector _posation;
public void Move()
{
_posation = _posation + MoveDirection;
}
public void Update()
{
Vector amount = Vector.Zero;
if (_input.KeyBoard.IsKeyHeld(Keys.Left))
{
amount.X = -1;
}
if (_input.KeyBoard.IsKeyHeld(Keys.Right))
{
amount.X = 1;
}
if (_input.KeyBoard.IsKeyHeld(Keys.Up))
{
amount.Y = -1;
}
if (_input.KeyBoard.IsKeyHeld(Keys.Down))
{
amount.Y = 1;
}
MoveDirection = amount;
}
}原文:http://www.cnblogs.com/lxjshuju/p/7375247.html