网站开发及服务合同,下列关于网站开发中网页额,5分钟宣传片多少钱,上海 网站设计公司1、模板方法模式 模板方法模式#xff1a;定义一个操作中的算法骨架#xff0c;而将一些步骤延迟到子类中#xff0c;模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 特点#xff1a;通过把不变的行为搬移到超类#xff0c;去除子类中重复的代…
1、模板方法模式 模板方法模式定义一个操作中的算法骨架而将一些步骤延迟到子类中模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 特点通过把不变的行为搬移到超类去除子类中重复的代码来体现它的优势。
模板方法模式提供了一个很好的代码复用平台。当不变的和可变的行为在子类实现中混合在一起的时候不变的行为就会在子类中重复出现。我们通过模板方法模式把这些行为搬移到单一的地方这样就帮助子类摆脱重复的不变的行为的纠缠。
2、Net Core 读取的类型文件 读取不同类型文件的代码 //读取JSONConfigurationBuilder builder new ConfigurationBuilder();builder.AddJsonFile(configuration.json);var config builder.Build();var collections config.AsEnumerable();//读取INIConfigurationBuilder builder new ConfigurationBuilder();builder.AddIniFile(configuration.ini);var config builder.Build();var collections config.AsEnumerable();//读取XMLConfigurationBuilder builder new ConfigurationBuilder();builder.AddXmlFile(configuration.xml);var config builder.Build();var collections config.AsEnumerable();
如上代码如果不使用模板方法模式定义读取文件基类子类中重写读取方法如下代码 //定义读取文件的基类public abstract class AFileRead{public abstract void Read(string path);}//定义读取JSON文件的子类public class FileReadJson:AFileRead{public override void Read(string path){ConfigurationBuilder builder new ConfigurationBuilder();builder.AddJsonFile(path);var config builder.Build();var collections config.AsEnumerable();}}//定义读取INI文件的子类
public class FileReadIni : AFileRead
{public override void Read(string path){ConfigurationBuilder builder new ConfigurationBuilder();builder.AddIniFile(path);var config builder.Build();var collections config.AsEnumerable();}
}
//定义读取XML文件的子类public class FileReadXml:AFileRead{public override void Read(string path){ConfigurationBuilder builder new ConfigurationBuilder();builder.AddXmlFile(path);var config builder.Build();var collections config.AsEnumerable();}}
上述代码中只有一行读取不同类型文件代码不同其余代码都相同。这只是单独的一个读取文件的功能代码量很小如果是一个特别大的功能代码过多那么如果要更改的话工作量也是很大的。
为了减少重复的代码如何去解决这个问题 这个时候模板方法模式就起作用了。模板方法模式将子类中不变的行为定义到基类中子类中只留下可变的行为这样子类中就摆脱了重复代码的纠缠代码如下
//定义读取文件的接口
public interface IFileRead
{IEnumerableKeyValuePairstring,string ReadFile();
}//定义读取文件封装重复代码将可变的行为延迟到子类中实现
public abstract class AFileRead : IFileRead
{public IEnumerableKeyValuePairstring, string ReadFile(){ConfigurationBuilder builder new ConfigurationBuilder();AddFile(builder); var config builder.Build();var collections config.AsEnumerable();return collections;}//这个函数需要延迟到子类中去实现protected abstract IConfigurationBuilder AddFile(ConfigurationBuilder builder);
}
//读取JSON文件
public class ReadJsonFile : AFileRead
{protected override IConfigurationBuilder AddFile(ConfigurationBuilder builder){return builder.AddJsonFile(configuration.json);}
}
//读取XML文件
public class ReadXmlFile : AFileRead
{protected override IConfigurationBuilder AddFile(ConfigurationBuilder builder){return builder.AddXmlFile(configuration.xml);}
}
//读取Ini文件
public class ReadIniFile : AFileRead
{protected override IConfigurationBuilder AddFile(ConfigurationBuilder builder){return builder.AddIniFile(configuration.ini);}
}
总结 模板方法模式帮助我们封装了不变的行为涉及到实现某些特定步骤时就延迟到了子类中去实现在更改某个读取文件的函数时不会影响到其他读取文件的功能。