界面与逻辑分离Java_界面与后台逻辑完全分离,单例模式,接口

10206248.html

界面与后台逻辑完全分离的方法可以防止我们绕过很多坑,避免很多错误,下面我自己总结下:

首先我们实现前台界面是这样的一个界面:实现点击添加的时候,把文本框的东西添加到list中,点击显示和添加后显示的是一样,点击新窗体的时候,实现form1 的数据。其实我们可以用一个中间的变量,传给新窗体,我们现在不用这种方法,我们用如下方法:

0a626d64c0cdbefb433864cab231dca7.png

我们准备数据源,添加一个Testdata类,一开始的时候,我们不继承接口,只是单纯的一个Testdata类,这个数据是测试数据,插入代码:

public class Testdata : ITruedata//测试数据

{

List _datas = new List() {"test 1","test 2"};public void Add(stringitem)

{

_datas.Add("test" +item);

}public string[] Select()

{return_datas.ToArray();

}

}

form1的后台代码逻辑,为了方便,我把整个代码拷贝下来,添加了注释说明,输入如下代码:

///

///界面与数据完全分离。form1到form2,保留数据,///

public partial classForm1 : Form

{publicForm1()

{

InitializeComponent();

}

//方法改变只要更改这个声明即可,不需要修改其他的,实现了完全分离

ITruedata data=MyClass.data;

ITruedata data1=MyClass.data1;///

///添加按钮///

///

///

private void BtnAdd_Click(objectsender, EventArgs e)

{//load

data.Add(DateTime.Now.ToString());//show

listBox1.DataSource =data.Select();

}///

///显示按钮///

///

///

private void BtnShow_Click(objectsender, EventArgs e)

{

listBox1.DataSource=data.Select();

}///

///新窗体按钮///

///

///

private void BtnWin_Click(objectsender, EventArgs e)

{

Form2 fm= newForm2();

fm.ShowDialog();

}///

///添加2///

///

///

private void button1_Click(objectsender, EventArgs e)

{

data1.Add(DateTime.Now.ToString());//show

listBox1.DataSource =data.Select();

}///

///新窗体2///

///

///

private void button2_Click(objectsender, EventArgs e)

{

Form2 fm= newForm2();

fm.ShowDialog();

}

}

我们在form2中,只有一个列表,我们把form1界面的值传给form2,

1f772285030a5ad810e4c6980479e6f9.png

form2的代码:

public partial classForm2 : Form

{publicForm2()

{

InitializeComponent();

}

ITruedata data=MyClass.data;private void Form2_Load(objectsender, EventArgs e)

{//load

var data1 =data.Select();//show

listBox1.DataSource =data1;

}

}

我们把数据类提取成接口,只声明不实现,在派生类下实现:

public interface ITruedata //数据接口

{void Add(stringitem);string[] Select();

}

我们可以把测试数据改为真实的数据,Truedata一开始的时候也是单纯的一个类,我们不加继承接口,假如真实的数据是这样的:

public class Truedata : ITruedata//真

{

List _datas = new List() {"i'm 1","i'm 2"};public void Add(stringitem)

{

_datas.Add(item);

}public string[] Select()

{return_datas.ToArray();

}

}

最重要的一点,就是建一个类,声明静态的,保证只实例化一次,也可以用单例模式,这样才能保证新窗体的数据不改变,

public classMyClass

{旧的不提取接口

//public static Truedata data1 = new Truedata();

新的

//public static Testdata data = new Testdata();//提取接口//旧的

public static ITruedata data1 = newTruedata();//新的

public static ITruedata data = newTestdata();

}

总结如下图:上面的黑色的是很多个窗体,bag是单例模式或者是接口,下面是各种数据库的连接,这样可以实现一个程序可以实现多个数据库的切换,凑时间我写一个实现多个数据库连接的例子

最下面这个图,就是我以上的的代码总结。

358f420ecf3919467ebc71268d6da32f.png

9a989b7cf1d5a61c25b87025a7981eed.png

10206248.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值