适配器模式(adapter)c#简单例子
结合上回外观模式中的类,从外部引入mydll.dll类库中wemanplay类,其接口有属性stringMove 、 stringJump和行为wemanmove()、wemanjump(),采用适配器变为自己类中通用接口。
在外观模式中增加一个新类适配器
public class addplay : play//由引类wemanplay类适配为现有play类
{
private wemanplay wplay;//引个已编译好的wemanplay类
public addplay()
{
wplay = new wemanplay();
}
public override void move()//将wemanplay类中wemanmove适配为现有类中move
{
wplay.wemanmove();
movestring = wplay.stringMove; //属性stringMove适配为现有类中movestring;
}
public override void jump()//将wemanplay类中wemanjump适配为现有类中jump
{
wplay.wemanjump();
jumpstring = wplay.stringJump;//属性stringJump适配为现有类中jumpstring;
}
所有代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using mydll;//添加引用wemanplay类
namespace adapterpattern
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnDisplay_Click(object sender, EventArgs e)
{
facadeFactory ff = new facadeFactory();//外观模式隐藏了玩家,用户不知道有几个玩家
ff.move();//实现外观功能1
this.listBox1.Items.Add(ff.movestring);
ff.jump();//实现外观功能2
this.listBox1.Items.Add(ff.jumpstring);
}
}
public abstract class play//对所有玩家进行抽象
{
public string movestring { get; set; }
public string jumpstring { get; set; }
public abstract void move();
public abstract void jump();
}
public class play1 : play//玩家1
{
public override void move()
{
movestring = "play1 move";
}
public override void jump()
{
jumpstring = "play1 jump";
}
}
public class play2 : play//玩家2
{
public override void move()
{
movestring = "play2 move";
}
public override void jump()
{
jumpstring = "play2 jump";
}
}
public class addplay : play//由引类wemanplay类适配为现有play类
{
private wemanplay wplay;
public addplay()
{
wplay = new wemanplay();
}
public override void move()//将wemanplay类中wemanmove适配为现有类中move
{
wplay.wemanmove();
movestring = wplay.stringMove; //属性stringMove适配为现有类中movestring;
}
public override void jump()//将wemanplay类中wemanjump适配为现有类中jump
{
wplay.wemanjump();
jumpstring = wplay.stringJump;//属性stringJump适配为现有类中jumpstring;
}
}
public class facadeFactory//外观模式工厂实现
{
public string movestring;
public string jumpstring;
List<play> plays = new List<play>();
public facadeFactory()
{
plays.Add( new play1());
plays.Add( new play2() );
plays.Add(new addplay ());
}
public void move()//外观模式功能一:两个玩家组队一起移动
{
foreach (play playt in plays)
{
playt.move();
movestring += playt.movestring;
}
}
public void jump()//外观模式功能二:两个玩家组队一起跳跃
{
foreach (play playt in plays)
{
playt.jump();
jumpstring += playt.jumpstring;
}
}
}
}
文中引用的mydll.dll在这里下载http://yunpan.cn/cfwfiu7KzAkiZ 提取码 3d67
vs2010中c#中类库dll制作和引用方法
此文件由朱朱编写,转载请注明出自朱朱家园http://blog.youkuaiyun.com/zhgl7688