加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 在这种情况下使用什么样的设计模式?

发布时间:2020-12-15 22:37:13 所属栏目:百科 来源:网络整理
导读:我有40个供应商需要建立ftp连接,在那里做一些事情并关闭连接.因此,所有这40个供应商都有自己的类,他们都有ftp服务器的连接和断开连接,但它们都有不同的处理方法. 所以基本上我用这个方法有40个类: ftp.Connect();//do something - this is different for al
我有40个供应商需要建立ftp连接,在那里做一些事情并关闭连接.因此,所有这40个供应商都有自己的类,他们都有ftp服务器的连接和断开连接,但它们都有不同的处理方法.

所以基本上我用这个方法有40个类:

ftp.Connect();
//do something - this is different for all the classes
ftp.Close();

所以做某事的部分是不同的,它做不同的事情,它使用不同的变量等.

我认为我会做的是:创建一个将在所有40个供应商中实例化的新类.这个类有一个看起来像这样的方法:

public void Connect(FTPCredentials credentials,Process process)
{
    var ftp = new FtpConnection(credentials.Host,credentials.Username,credentials.Password);
    ftp.Open();
    ftp.Login();

    process(ftp);

    ftp.Close();
}

public delegate void Process(FtpConnection ftp/*,string name*/);

我在这里遇到的问题是,所有40个供应商的所有方法都有不同的输入参数,那么Process的输入参数是什么?此外,我认为我没有获得太多,因为我仍然有FtpConnection ftp参数,这意味着我将不得不在每个将使用Connect方法的项目中添加具有类FtpConnection的dll.

例如,供应商中的流程方法如下所示:

process(string fileName) //and it would download fileName
process(string folderName) //create folder if it doesnt exist

我可以在这里使用的设计模式更干净,会让事情变得更容易吗?

解决方法

我的印象是,这样的对象仅在短时间内用于特定目的.所以我会接受存储在特定派生类中的特定参数.与mybirthname的解决方案类似,我将从一个抽象类开始,但以不同的方式定义它:

public abstract class BaseSupplier
{
    protected BaseSupplier(FtpCredentials credentials)
    {
        _Credentials = credentials;
    }
    private FtpCredentials _Credentials;

    public void Run()
    {
        Connect();
        Process();
        Disconnect();
    }

    private void Connect() {/* your connection and login code */}
    private void Disconnect() {/* your disconnect code */}
    protected abstract void Process(); // to be filled in the derived class
}

public class ConcreteSupplier
{
    public ConcreteSupplier(FtpCredentials credentials,SomeType parameter) : base(credentials)
    { /* store extra parameters */ }

    override Process() {/*your concrete processing code */ }
}

如果我没记错的话,那叫做战略模式.

编辑:juunas是对的,它是模板方法模式.在Gamma等人中,模板方法直接在战略的行为模式一章中描述.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读