当前位置: 首页 > news >正文

专业的建站公司都具备什么条件凡科建站收费价目表

专业的建站公司都具备什么条件,凡科建站收费价目表,wordpress主题ux themes,怎么查一个公司是否正规java 泛型示例如果您发现除了某些部分外#xff0c;您的许多例程完全相同#xff0c;那么您可能需要考虑使用Template Method来消除容易出错的代码重复 。 这是一个示例#xff1a;下面是两个做类似事情的类#xff1a; 实例化并初始化Reader以从CSV文件读取。 阅读每一行… java 泛型示例 如果您发现除了某些部分外您的许多例程完全相同那么您可能需要考虑使用Template Method来消除容易出错的代码重复 。 这是一个示例下面是两个做类似事情的类 实例化并初始化Reader以从CSV文件读取。 阅读每一行并将其分解为令牌。 将每行中的令牌解组到一个实体产品或客户中。 将每个实体添加到集合中。 返回集合。 如您所见只有在第三步中才有所不同-拆封到一个实体或另一个实体。 其他所有步骤均相同。 我已经突出显示了每个代码段中代码都不同的那一行。 ProductCsvReader.java public class ProductCsvReader {SetProduct getAll(File file) throws IOException {SetProduct returnSet new HashSet();try (BufferedReader reader new BufferedReader(new FileReader(file))){String line reader.readLine();while (line ! null !line.trim().equals()) {String[] tokens line.split(\\s*,\\s*);Product product new Product(Integer.parseInt(tokens[0]), tokens[1],new BigDecimal(tokens[2]));returnSet.add(product);line reader.readLine();}}return returnSet;} }CustomerCsvReader.java public class CustomerCsvReader {SetCustomer getAll(File file) throws IOException {SetCustomer returnSet new HashSet();try (BufferedReader reader new BufferedReader(new FileReader(file))){String line reader.readLine();while (line ! null !line.trim().equals()) {String[] tokens line.split(\\s*,\\s*);Customer customer new Customer(Integer.parseInt(tokens[0]), tokens[1],tokens[2], tokens[3]);returnSet.add(customer);line reader.readLine();}}return returnSet;} } 在此示例中只有两个实体但是实际系统中可能有数十个实体因此有很多容易出错的重复代码。 对于DAO您可能会发现类似的情况其中每个DAO的选择插入更新和删除操作将执行相同的操作仅适用于不同的实体和表。 让我们开始重构这个麻烦的代码。 根据GoF设计模式第一部分中提到的一种设计原则我们应该“封装变化的概念”。 在ProductCsvReader和CustomerCsvReader之间突出显示的代码是不同的。 因此我们的目标是将变化的内容封装到单独的类中同时将保持不变的内容移动到单个类中。 让我们首先开始只编辑一个类即ProductCsvReader。 我们使用提取方法将行提取到自己的方法中 提取方法后的ProductCsvReader.java public class ProductCsvReader {SetProduct getAll(File file) throws IOException {SetProduct returnSet new HashSet();try (BufferedReader reader new BufferedReader(new FileReader(file))){String line reader.readLine();while (line ! null !line.trim().equals()) {String[] tokens line.split(\\s*,\\s*);Product product unmarshall(tokens);returnSet.add(product);line reader.readLine();}}return returnSet;}Product unmarshall(String[] tokens) {Product product new Product(Integer.parseInt(tokens[0]), tokens[1], new BigDecimal(tokens[2]));return product;} } 既然我们已经区分了哪些变化与哪些保持不变我们将创建一个父类该父类将保存两个类保持相同的代码。 我们将此父类称为AbstractCsvReader。 让我们使其抽象因为没有理由单独实例化该类。 然后我们将使用Pull Up Method重构将保持不变的方法移到该父类。 AbstractCsvReader.java abstract class AbstractCsvReader {SetProduct getAll(File file) throws IOException {SetProduct returnSet new HashSet();try (BufferedReader reader new BufferedReader(new FileReader(file))){String line reader.readLine();while (line ! null !line.trim().equals()) {String[] tokens line.split(\\s*,\\s*);Product product unmarshall(tokens);returnSet.add(product);line reader.readLine();}}return returnSet;} }上拉方法后的ProductCsvReader.java public class ProductCsvReader extends AbstractCsvReader {Product unmarshall(String[] tokens) {Product product new Product(Integer.parseInt(tokens[0]), tokens[1], new BigDecimal(tokens[2]));return product;} } 此类无法编译因为它调用了在子类中找到的“ unmarshall”方法因此我们需要创建一个称为unmarshall的抽象方法。 使用抽象解组方法的AbstractCsvReader.java abstract class AbstractCsvReader {SetProduct getAll(File file) throws IOException {SetProduct returnSet new HashSet();try (BufferedReader reader new BufferedReader(new FileReader(file))){String line reader.readLine();while (line ! null !line.trim().equals()) {String[] tokens line.split(\\s*,\\s*);Product product unmarshall(tokens);returnSet.add(product);line reader.readLine();}}return returnSet;}abstract Product unmarshall(String[] tokens); } 现在AbstractCsvReader将成为ProductCsvReader的出色父级而不是CustomerCsvReader的父级。 如果从AbstractCsvReader扩展CustomerCsvReader则它将不会编译。 为了解决这个问题我们使用泛型。 具有泛型的AbstractCsvReader.java abstract class AbstractCsvReaderT {SetT getAll(File file) throws IOException {SetT returnSet new HashSet();try (BufferedReader reader new BufferedReader(new FileReader(file))){String line reader.readLine();while (line ! null !line.trim().equals()) {String[] tokens line.split(\\s*,\\s*);T element unmarshall(tokens);returnSet.add(product);line reader.readLine();}}return returnSet;}abstract T unmarshall(String[] tokens); }带有泛型的ProductCsvReader.java public class ProductCsvReader extends AbstractCsvReaderProduct {OverrideProduct unmarshall(String[] tokens) {Product product new Product(Integer.parseInt(tokens[0]), tokens[1], new BigDecimal(tokens[2]));return product;} }CustomerCsvReader.java与泛型 public class CustomerCsvReader extends AbstractCsvReaderCustomer {OverrideCustomer unmarshall(String[] tokens) {Customer customer new Customer(Integer.parseInt(tokens[0]), tokens[1], tokens[2], tokens[3]);return customer;} } 就是这样 没有更多重复的代码 父类中的方法是“模板”其中包含保持不变的代码。 更改的内容保留为抽象方法这些方法在子类中实现。 请记住重构时应该始终进行自动化的单元测试以确保不破坏代码。 我将JUnit用于我的。 您可以在Github存储库中找到我在此处发布的代码以及其他一些“设计模式”示例。 在开始之前我想简单介绍一下模板方法的缺点。 模板方法依赖于继承而继承则存在脆弱的基类问题 。 简而言之脆弱的基类问题描述了基类的更改如何被子类继承并经常导致不良后果。 实际上在GoF本书开始时发现的基本设计原则之一就是“偏向于继承而不是继承”许多其他设计模式都说明了如何避免代码重复复杂性或其他容易出错的代码而减少了依赖关于继承。 请给我反馈以便我可以继续改进我的文章。 翻译自: https://www.javacodegeeks.com/2014/07/template-method-pattern-example-using-java-generics.htmljava 泛型示例
http://www.pierceye.com/news/605166/

相关文章:

  • 修改网站主目录的位置wordpress商品展示模板
  • 微信微网站是什么案例天津室内设计培训
  • 如何做网站网页广州海珠网站开发设计
  • 做技术网站赚钱集团网站建设新闻
  • 建立门户网站的意义自己搞个网站需要多少钱
  • 佛山网站优化好华为邮箱注册
  • 哈尔滨网站建设公司名字如何做网络营销推广员
  • 做详情页到那个网站找模特素材怎么黑进网站后台
  • 郑州seo建站深圳专业软件网站建设
  • 廊坊网站搜索优化互联网站账户e服务平台
  • 昆明建设网站wordpress设置中改网站
  • 无锡专业网站制作的公司移动互联网开发技术有哪些
  • 济南市城市建设集团网站wordpress user role editor
  • linux 配置网站域名做资金盘 互助盘的网站
  • 网站开发工程师培训定制网站开发app费用
  • 给菠菜网站做外包免费做思维导图的网站
  • 网站建设服务哪家好如何做属于自己的网站
  • 正规的佛山网站建设公司网站空间怎么续费
  • 网站建设需要照片吗网站策划网站建设企业
  • 网站标签的作用北京医疗网站建设公司
  • 西部数码成品网站商务网站建设调研
  • 服装行业网站模板网页无法访问公司内网
  • 如何建设一个不备案的网站互联网的意思
  • 承德网站开发应聘软件开发工程师简历
  • 创意手机网站做go分析和kegg分析网站
  • 房地产开发建设网站wordpress多站点cdn
  • 医疗室内设计网站推荐wordpress htaccess
  • 织梦 图片网站源码uml电子商务网站建设文档
  • 商用图片的网站开发一款交友软件多少钱
  • 15年做哪些网站能致富单位做网站有哪些