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

建设论坛网站大概多少钱网站推广的基本手段有哪些

建设论坛网站大概多少钱,网站推广的基本手段有哪些,集团网站建设,网站设计的灵感来源假设你发现你已经非常重码#xff0c;你可能会考虑使用模板的方法来消除easy重复错误代码。下面是一个示例:以下两类,他完成了几乎相同的功能#xff1a; 实例化并初始化一个Reader来读取CSV文件。读取每一行并解析#xff1b;把每一行的字符填充到Product或Customer对象你可能会考虑使用模板的方法来消除easy重复错误代码。下面是一个示例:以下两类,他完成了几乎相同的功能 实例化并初始化一个Reader来读取CSV文件。读取每一行并解析把每一行的字符填充到Product或Customer对象将每个对象加入到Set里返回Set。 正如你看到的仅仅有有凝视的地方是不一样的。其它全部步骤都是同样的。 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我们使用Extract Method提取带凝视的部分 ProductCsvReader.java after Extract Method 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它包括两个类ProductReader和CustomerReader同样的部分。我们把它定义为一个抽象类。由于我们不须要实例化它。然后我们将使用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 after Pull Up Method 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方法所以我们要创建一个叫unmarshall的抽象方法。 AbstractCsvReader.java with abstract unmarshall method 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的父类。假设CustomerCsvReader继承AbstractCsvReader编译会报错。为了解决问题我们使用泛型。 AbstractCsvReader.java with Generics 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 with Generics 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 with Generics 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库找一些其它设计模式的样例。在结束之前,我想说一下模板方法的缺点。模板方法依赖于继承。患有 the Fragile Base Class Problem。简单的说就是改动父类会对继承它的子类造成意想不到的不良影响。其实基础设计原则之中的一个的GoF设计模式提倡“多用组合少用继承”。而且更多设计模式也告诉你怎样避免代码反复同一时候又让复杂或easy出错的代码尽量少的依赖继承。欢迎交流以便我能够提高我的博客质量。 原文地址。Template Method Pattern Example Using Java Generics 翻译的不好。欢迎拍砖。 本文转自mfrbuaa博客园博客原文链接http://www.cnblogs.com/mfrbuaa/p/4657272.html如需转载请自行联系原作者
http://www.huolong8.cn/news/21893/

相关文章:

  • flash网站开发教程过时的网站
  • 水果网站推广用dw设计一个简单网页成品
  • 常州创新优典网站建设室内设计师素材网
  • 网站的首页怎么做ui培训班好
  • 宁波建网站哪家值得信赖湘潭本地的网站建设公司
  • 全国网站建设公司实力排名织梦微信网站模板
  • 淮北市网站建设杭州定制网站制作
  • 网站花瓣飘落的效果怎么做做海报有什么借鉴的网站
  • 做网站要那些工具百度搜索 相关网站
  • app设计网站模板org后缀的网站
  • 如何搭建自己得网站点菜网站模板
  • 济南市住房和城乡建设部网站物联网应用前景
  • 成都创建公司网站潍坊百度seo公司
  • 凡科网 免费网站上海网站设计案例
  • 个人网站开发的背景公关公司排行榜
  • 网站建设禁止谷歌收录的办法python做网站性能
  • 胶东国际机场建设有限公司网站淘宝店铺推广渠道有哪些
  • 深圳北网站建设轻云服务器 wordpress
  • 网站域名改了以后新域名301宿迁房产网58同城网
  • 网站都要交域名费么wordpress 备案信息修改
  • 企业做的网站计入什么科目全网推广推荐
  • 未满十八岁能用网上借钱吗seo百度点击软件
  • 电商运营网站支付招聘网站怎么做费用
  • 名片型网站开发网站怎么做h5支付宝支付
  • 网站字体设计规范商业网站开发设计实训总结
  • 上海泵阀网站建设现在推广网站最好的方式
  • 搭建公司网站教程上海市公司名称大全
  • 免费建设物流网站中元建设集团股份有限公司网站
  • 口碑好的昆明网站建设网页制作页面布局
  • wordpress怎样做手机站wp如何做网站地图