• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    ASP.NET的适配器设计模式(Adapter)应用详解
    前天有一网友问及有关设计模式的适配器模式(Adapter)时,说不太好理解。让Insus.NET能否举个简单的例子来说明一下。下面的动画是Insus.NET做出来的效果:

    上面的演示,两个灯的规格一样,要求输入的电压为15伏。
    Light1是直接使用,而Light2是使用Adapter(电源适配器)。因此Light1只能接收15伏的电压,小于15伏,会提示电压过低,如果超过了15伏,Light1肯定被烧坏。

    Light2使用了电源适配器,它接收15伏至220的电压,在这电压范围之内,电源适配器会把电压转为15的电压。小于15伏,会提示电压过低,如果超过了220伏,适配器被烧坏。

    好,我们程序开始,先创建一个灯Light的类:
    复制代码 代码如下:

    Light.cs
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    /// summary>
    /// Summary description for Light
    /// /summary>
    namespace Insus.NET
    {
    public class Light
    {
    private int _InputVoltage = 15;
    public int InputVoltage
    {
    get { return _InputVoltage; }
    set
    {
    if (value 15)
    throw new Exception("电压过低。");
    else if (value > 15)
    throw new Exception("危险!电压过大灯烧坏。");
    else
    value = 15;
    _InputVoltage = value;
    }
    }
    public Light()
    {
    //
    // TODO: Add constructor logic here
    //
    }
    }
    }

    再创建一个灯的电源适配器:
    复制代码 代码如下:

    PowerAdapter.cs
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    /// summary>
    /// Summary description for PowerAdapter
    /// /summary>
    namespace Insus.NET
    {
    public class PowerAdapter : Light
    {
    Light _Light;
    public PowerAdapter(Light light)
    {
    this._Light = light;
    }
    public int InputVoltage
    {
    get
    {
    return _Light.InputVoltage;
    }
    set
    {
    if (value 15)
    throw new Exception("电压过低。");
    else if (value > 220)
    throw new Exception("危险!电压过大电源适配器烧坏。");
    else
    value = 15;
    _Light.InputVoltage = value;
    }
    }
    }
    }

    如何测试它们,我们得模拟一个环境,创建一个网页Default.aspx:
    复制代码 代码如下:

    Default.aspx
    %@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
    !DOCTYPE html>
    html xmlns="http://www.w3.org/1999/xhtml">
    head runat="server">
    title>/title>
    script type="text/javascript">
    function isNumeric(keyCode) {
    return ((keyCode >= 48 keyCode = 57) || keyCode == 8)
    }
    /script>
    /head>
    body>
    form id="form1" runat="server">
    table>
    tr>
    td align="right">插座电压/td>
    td colspan="2">
    asp:TextBox ID="TextBox1" runat="server" onkeydown="return isNumeric(event.keyCode);" Text="220">/asp:TextBox>/td>
    /tr>
    tr>
    td align="right">开关/td>
    td colspan="2">
    asp:CheckBox ID="CheckBoxSwitch" runat="server" AutoPostBack="true" OnCheckedChanged="CheckBoxSwitch_CheckedChanged" />/td>
    /tr>
    tr>
    td align="right">灯/td>
    td>
    fieldset style="width: 200px;">
    legend>Light 1
    /legend>
    asp:Image ID="Image1" runat="server" ImageUrl="Images/Light_C.gif" Width="36" Height="55" />br />
    asp:Label ID="Label1" runat="server" Text="">/asp:Label>
    /fieldset>
    /td>
    td>
    fieldset style="width: 250px;">
    legend>Light 2
    /legend>
    asp:Image ID="Image2" runat="server" ImageUrl="Images/Light_C.gif" Width="36" Height="55" />br />
    asp:Label ID="Label2" runat="server" Text="">/asp:Label>
    /fieldset>
    /td>
    /tr>
    /table>
    /form>
    /body>
    /html>

    接下来,看看开关的事开与关的事件,有详细的注解:
    复制代码 代码如下:

    Default.aspx.cs
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using Insus.NET;
    public partial class _Default : System.Web.UI.Page
    {
    string offLight = "~/Images/Light_C.gif";
    string onLight = "~/Images/Light_O.gif";
    protected void Page_Load(object sender, EventArgs e)
    {
    }
    protected void CheckBoxSwitch_CheckedChanged(object sender, EventArgs e)
    {
    var cb = (CheckBox)sender;
    //插座缺少电压为220伏
    int input = Convert.ToInt32(string.IsNullOrEmpty(this.TextBox1.Text.Trim()) ? "220" : this.TextBox1.Text.Trim());
    //开关打开
    if (cb.Checked)
    {
    try
    {
    //实例一个电灯
    Light light = new Light();
    //插入插座,使用插座电压
    light.InputVoltage = input;
    //电灯被打开
    this.Image1.ImageUrl = onLight;
    //显示正常输出电压
    this.Label1.Text = light.InputVoltage.ToString();
    }
    catch (Exception ex)
    {
    //如果电压不正常,电灯打不开或是被烧坏。
    this.Image1.ImageUrl = offLight;
    //显示异常信息。
    this.Label1.Text = ex.Message;
    }
    try
    {
    Light light = new Light();
    //使用电源适配器
    PowerAdapter pa = new PowerAdapter(light);
    pa.InputVoltage = input;
    this.Image2.ImageUrl = onLight;
    this.Label2.Text = pa.InputVoltage.ToString();
    }
    catch (Exception ex)
    {
    this.Image2.ImageUrl = offLight;
    this.Label2.Text = ex.Message;
    }
    this.TextBox1.Enabled = false;
    }
    //开关关闭
    else
    {
    this.TextBox1.Text = string.Empty;
    this.TextBox1.Enabled = true;
    this.Image1.ImageUrl = offLight;
    this.Image2.ImageUrl = offLight;
    }
    }
    }

    11:44分,补充下面内容,有网友问及演示完整代码(.NET Framework 4.0)
    您可能感兴趣的文章:
    • Asp.Net设计模式之单例模式详解
    • C#设计模式之Template模板方法模式实现ASP.NET自定义控件 密码强度检测功能
    • 关于.NET Framework中的设计模式--应用策略模式为List排序
    • jQuery 验证插件 Web前端设计模式(asp.net)
    • .net设计模式之装饰模式(Decorator)
    上一篇:RadioButtonList绑定图片及泛型Dictionary应用
    下一篇:显示非站点目录及映射网络磁盘路径的图片
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    ASP.NET的适配器设计模式(Adapter)应用详解 ASP.NET,的,适配器,设计模式,