我学习适配器模式。我有这个代码。它看起来像这种模式? SQLiteConnection,SQLiteCommand,SQLiteDataReader - 它来自其他库
现在,我从数据库中执行任务:连接,返回所有用户。我选择了适配器模式:
public class user {
public string _name { get; set; }
public string _surname { get; set;}
}
public interface IExercise {
void connectToDataBase();
void List<user> returnAllUsers();
}
public Adapter : IExercise {
SQLiteConnection _conn = null;
SQLiteCommand _cmd;
public Adapter(SQLiteConnection conn, SQLiteCommand cmd){
_conn = conn;
_cmd = cmd;
}
public void connectToDataBase(){
// not important yet
}
public List<user> returnAllUsers(){
_cmd = _conn.newCommand();
_cmd.CommandText = "SELECT * FROM users";
SQLiteDataReader dt = _cmd.ExecuteReader();
List<user> lu = new List<user>();
while(dt.Read()){
lu.Add(new user {
_name = dt["name"].ToString(),
_surname = dt["surname"].ToString()
}
);
}
return lu;
}
}
我的问题只是:它看起来像适配器模式?
答案 0 :(得分:3)
我不明白为什么你认为你的代码看起来像一个适配器,你没有不匹配的接口,适配器模式将一个类的接口映射到另一个类,以便它们可以一起工作。这些不兼容的类可能来自不同的库或框架。
工作示例
<强>定义强>
适配器可帮助两个不兼容的接口协同工作。这是 适配器的真实世界定义。适配器设计模式 当你想要两个不兼容的不同类时使用 接口协同工作。接口可能不兼容,但是 内在功能应该适合需要。适配器模式允许 否则不兼容的类通过转换来协同工作 一个类的接口到客户期望的接口。
来自http://www.dofactory.com/Patterns/PatternAdapter.aspx
的示例using System;
namespace AdapterPattern
{
/// <summary>
/// MainApp startup class for Real-World
/// Adapter Design Pattern.
/// </summary>
class MainApp
{
/// <summary>
/// Entry point into console application.
/// </summary>
static void Main()
{
// Non-adapted chemical compound
Compound unknown = new Compound("Unknown");
unknown.Display();
// Adapted chemical compounds
Compound water = new RichCompound("Water");
water.Display();
Compound benzene = new RichCompound("Benzene");
benzene.Display();
Compound ethanol = new RichCompound("Ethanol");
ethanol.Display();
// Wait for user
Console.ReadKey();
}
}
/// <summary>
/// The 'Target' class
/// </summary>
class Compound
{
protected string _chemical;
protected float _boilingPoint;
protected float _meltingPoint;
protected double _molecularWeight;
protected string _molecularFormula;
// Constructor
public Compound(string chemical)
{
this._chemical = chemical;
}
public virtual void Display()
{
Console.WriteLine("\nCompound: {0} ------ ", _chemical);
}
}
/// <summary>
/// The 'Adapter' class
/// </summary>
class RichCompound : Compound
{
private ChemicalDatabank _bank;
// Constructor
public RichCompound(string name)
: base(name)
{
}
public override void Display()
{
// The Adaptee
_bank = new ChemicalDatabank();
_boilingPoint = _bank.GetCriticalPoint(_chemical, "B");
_meltingPoint = _bank.GetCriticalPoint(_chemical, "M");
_molecularWeight = _bank.GetMolecularWeight(_chemical);
_molecularFormula = _bank.GetMolecularStructure(_chemical);
base.Display();
Console.WriteLine(" Formula: {0}", _molecularFormula);
Console.WriteLine(" Weight : {0}", _molecularWeight);
Console.WriteLine(" Melting Pt: {0}", _meltingPoint);
Console.WriteLine(" Boiling Pt: {0}", _boilingPoint);
}
}
/// <summary>
/// The 'Adaptee' class
/// </summary>
class ChemicalDatabank
{
// The databank 'legacy API'
public float GetCriticalPoint(string compound, string point)
{
// Melting Point
if (point == "M")
{
switch (compound.ToLower())
{
case "water": return 0.0f;
case "benzene": return 5.5f;
case "ethanol": return -114.1f;
default: return 0f;
}
}
// Boiling Point
else
{
switch (compound.ToLower())
{
case "water": return 100.0f;
case "benzene": return 80.1f;
case "ethanol": return 78.3f;
default: return 0f;
}
}
}
public string GetMolecularStructure(string compound)
{
switch (compound.ToLower())
{
case "water": return "H20";
case "benzene": return "C6H6";
case "ethanol": return "C2H5OH";
default: return "";
}
}
public double GetMolecularWeight(string compound)
{
switch (compound.ToLower())
{
case "water": return 18.015;
case "benzene": return 78.1134;
case "ethanol": return 46.0688;
default: return 0d;
}
}
}
}