我在学习适配器模式。我有这个密码。看上去像这个图案?SQLiteConnection,SQLiteCommand,SQLiteDataReader -这是来自其他图书馆的
现在我有了要求:、connect、和从数据库返回所有用户。我选择了Adapter模式:
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;
}
}我的问题是:它看起来像适配器模式吗?
发布于 2014-06-22 23:38:10
我不明白为什么您认为您的代码看起来像Adapter,您没有不匹配的接口,Adapter模式将一个类的接口映射到另一个类上,这样它们就可以一起工作了。这些不兼容的类可能来自不同的库或框架。

工作示例
http://ideone.com/ZZbwAE
定义
适配器帮助两个不兼容的接口协同工作。这是适配器的真实定义。当您希望两个具有不兼容接口的不同类协同工作时,将使用适配器设计模式。接口可能不兼容,但内部功能应该适合需要。Adapter模式允许通过将一个类的接口转换为客户机所期望的接口来使其他不兼容的类协同工作。
来自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;
}
}
}
}https://stackoverflow.com/questions/24356699
复制相似问题