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

ps设计网站360模板网

ps设计网站,360模板网,外贸网站和普通网站,网站开发去哪里找工作文章目录 一、定义#xff1a;模板模式二、模拟场景#xff1a;模板模式三、改善代码#xff1a;模板模式3.0 引入依赖3.1 工程结构3.2 模板模式结构图3.3 爬取商品生成海报实现3.3.1 HTTP获取连接类3.3.2 定义执行顺序的抽象类3.3.3 当当爬取抽象实现类3.3.4 京东爬取抽象实… 文章目录 一、定义模板模式二、模拟场景模板模式三、改善代码模板模式3.0 引入依赖3.1 工程结构3.2 模板模式结构图3.3 爬取商品生成海报实现3.3.1 HTTP获取连接类3.3.2 定义执行顺序的抽象类3.3.3 当当爬取抽象实现类3.3.4 京东爬取抽象实现类3.3.5 淘宝爬取抽象实现类 3.4 单元测试 四、总结模板模式 一、定义模板模式 模板模式通过在抽象类中定义抽象方法的执行顺序并将抽象方法设定为只有子类实现但不涉及 独立访问 的方法。 二、模拟场景模板模式 模拟爬虫各类电商商品生成营销推广海报场景。模板模式的核心点在于 由抽象类定义抽象方法执行策略也就是说父类规定好了 一系列的执行标准这些标准串联成一整套业务流程。 在这个场景中模拟爬虫爬取各类商家的商品信息生成推广海报赚取商品返利。整个爬取过程分为三个步骤模拟登录、爬取信息、生成海报。 因为有些商品只有登录后才可以爬取并且登录可以看到一些特定的价格这与未登录用户看到的价格不同。不同的电商网站爬取方式不同解析方式也不同因此可以作为每一个实现类中的特定实现。生成海报的步骤基本一样但会有特定的商品来源标识。所以这三个步骤可以使用模板模式来设定并有具体的场景做子类实现。 三、改善代码模板模式 模板模式的业务场景可能在世的开发中并不是很多主要因为这个设计模式会在抽象类中定义逻辑行为的执行顺序。 一般情况下我们用的抽象类定义的逻辑行为都比较轻量级或者没有只有提供一些基本方法公共调用和实现。 但如果遇到适合的场景使用这样的设计模式也是非常方便的因为他可以控制整套逻辑的执行顺序和统一的输入、输出而对于实现方只需要关心好自己的业务逻辑即可。在模拟场景中只需要记住三步实现模拟登录、爬取信息、生成海报。 3.0 引入依赖 dependenciesdependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.12/versionscopetest/scope/dependency!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --dependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactIdversion1.2.62/version/dependency!-- LOGGING begin --dependencygroupIdorg.slf4j/groupIdartifactIdslf4j-api/artifactIdversion1.7.5/version/dependencydependencygroupIdorg.slf4j/groupIdartifactIdjcl-over-slf4j/artifactIdversion1.7.5/version/dependencydependencygroupIdch.qos.logback/groupIdartifactIdlogback-classic/artifactIdversion1.0.9/versionexclusionsexclusionartifactIdslf4j-api/artifactIdgroupIdorg.slf4j/groupId/exclusion/exclusions/dependency /dependencies3.1 工程结构 design-step-22 |——src|——main|--java|--com.lino.design|--impl| |--DangDangNetMall.java| |--JDNetMall.java| |--TaoBaoNetMall.java|-HttpClient.java|-NetMall.java|--test|--com.lino.design.test|-ApiTest.java3.2 模板模式结构图 一个定义了抽象方法执行顺序的核心抽象类以及三个模拟具体的实现(京东、淘宝、当当)的电商服务。 3.3 爬取商品生成海报实现 3.3.1 HTTP获取连接类 HttpClient.java package com.lino.design;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.nio.charset.StandardCharsets;/*** description: http请求类*/ public class HttpClient {public static String doGet(String httpUrl) {HttpURLConnection connection null;InputStream is null;BufferedReader br null;String result null;try {// 创建远程url连接对象URL url new URL(httpUrl);// 通过远程url连接对象打开一个连接强转成HttpURLConnectionconnection (HttpURLConnection) url.openConnection();// 设置连接方式getconnection.setRequestMethod(GET);// 设置连接主机服务器的超时时间15000毫秒connection.setConnectTimeout(15000);// 设置读取远程返回的数据时间60000毫秒connection.setReadTimeout(60000);// 发送请求connection.connect();// 通过connection连接获取输入流if (connection.getResponseCode() 200) {is connection.getInputStream();// 封装输入流is并指定字符集br new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8));// 存放数据StringBuilder sbf new StringBuilder();String temp null;while ((temp br.readLine()) ! null) {sbf.append(temp);sbf.append(\r\n);}result sbf.toString();}} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {// 关闭资源if (null ! br) {try {br.close();} catch (IOException e) {e.printStackTrace();}}if (null ! is) {try {is.close();} catch (IOException e) {e.printStackTrace();}}// 关闭远程连接assert connection ! null;connection.disconnect();}return result;} }3.3.2 定义执行顺序的抽象类 NetMall.java package com.lino.design;import com.sun.org.apache.xpath.internal.operations.Bool; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Map; import java.util.regex.Pattern;/*** description: 抽象模板*/ public abstract class NetMall {protected Logger logger LoggerFactory.getLogger(NetMall.class);protected final Pattern p9 Pattern.compile((?title\\).*(?/title));/*** 用户ID*/String uId;/*** 用户密码*/String uPwd;public NetMall(String uId, String uPwd) {this.uId uId;this.uPwd uPwd;}/*** 生成商品推广海报** param skuUrl 商品url地址* return 推广海报*/public String generateGoodsPoster(String skuUrl) {// 1.验证登录if (!login(uId, uPwd)) {return null;}// 2.爬虫商品MapString, String reptile reptile(skuUrl);// 3.组装海报return createBase64(reptile);}/*** 模拟登录** param uId 用户ID* param uPwd 用户密码* return 登录结果*/protected abstract Boolean login(String uId, String uPwd);/*** 爬虫提取商品信息(登录后的优惠价格)** param skuUrl 商品Url地址* return 商品信息*/protected abstract MapString, String reptile(String skuUrl);/*** 生成商品推广海报** param goodsInfo 商品信息* return 推广海报*/protected abstract String createBase64(MapString, String goodsInfo); }这个类是模板模式的灵魂。定义可外被外部访问的方法 generateGoodsPoster 用于生成商品推广海报。generateGoodsPoster 在方法中定义抽象方法的执行顺序 1、2、3 步。提供三个具体的抽象方法让外部继承实现。 login模拟登录。reptile爬虫提取商品信息(登录后的优惠价格)。createBase64生成商品推广海报。 3.3.3 当当爬取抽象实现类 DangDangNetMall.java package com.lino.design.impl;import com.alibaba.fastjson.JSON; import com.lino.design.HttpClient; import com.lino.design.NetMall; import sun.misc.BASE64Encoder; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.regex.Matcher; import java.util.regex.Pattern;/*** description: 当当抽象实现类*/ public class DangDangNetMall extends NetMall {public DangDangNetMall(String uId, String uPwd) {super(uId, uPwd);}Overrideprotected Boolean login(String uId, String uPwd) {logger.info(模拟当当用户登录 uId{} uPwd{}, uId, uPwd);return true;}Overrideprotected MapString, String reptile(String skuUrl) {String str HttpClient.doGet(skuUrl);Matcher m9 p9.matcher(str);MapString, String map new ConcurrentHashMap();if (m9.find()) {map.put(name, m9.group());}map.put(price, 4548.00);logger.info(模拟当当商品爬虫解析{} | {} 元 {}, map.get(name), map.get(price), skuUrl);return map;}Overrideprotected String createBase64(MapString, String goodsInfo) {BASE64Encoder encoder new BASE64Encoder();logger.info(模拟生成当当商品base64海报);return encoder.encode(JSON.toJSONString(goodsInfo).getBytes());} }3.3.4 京东爬取抽象实现类 JDNetMall.java package com.lino.design.impl;import com.alibaba.fastjson.JSON; import com.lino.design.HttpClient; import com.lino.design.NetMall; import sun.misc.BASE64Encoder; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.regex.Matcher; import java.util.regex.Pattern;/*** description: 京东抽象实现类*/ public class JDNetMall extends NetMall {public JDNetMall(String uId, String uPwd) {super(uId, uPwd);}Overrideprotected Boolean login(String uId, String uPwd) {logger.info(模拟京东用户登录 uId{} uPwd{}, uId, uPwd);return true;}Overrideprotected MapString, String reptile(String skuUrl) {String str HttpClient.doGet(skuUrl);Matcher m9 p9.matcher(str);MapString, String map new ConcurrentHashMap();if (m9.find()) {map.put(name, m9.group());}map.put(price, 5999.00);logger.info(模拟京东商品爬虫解析{} | {} 元 {}, map.get(name), map.get(price), skuUrl);return map;}Overrideprotected String createBase64(MapString, String goodsInfo) {BASE64Encoder encoder new BASE64Encoder();logger.info(模拟生成京东商品base64海报);return encoder.encode(JSON.toJSONString(goodsInfo).getBytes());} }3.3.5 淘宝爬取抽象实现类 TaoBaoNetMall.java package com.lino.design.impl;import com.alibaba.fastjson.JSON; import com.lino.design.HttpClient; import com.lino.design.NetMall; import sun.misc.BASE64Encoder; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.regex.Matcher;/*** description: 淘宝抽象实现类*/ public class TaoBaoNetMall extends NetMall {public TaoBaoNetMall(String uId, String uPwd) {super(uId, uPwd);}Overrideprotected Boolean login(String uId, String uPwd) {logger.info(模拟淘宝用户登录 uId{} uPwd{}, uId, uPwd);return true;}Overrideprotected MapString, String reptile(String skuUrl) {String str HttpClient.doGet(skuUrl);Matcher m9 p9.matcher(str);MapString, String map new ConcurrentHashMap();if (m9.find()) {map.put(name, m9.group());}map.put(price, 4799.00);logger.info(模拟淘宝商品爬虫解析{} | {} 元 {}, map.get(name), map.get(price), skuUrl);return map;}Overrideprotected String createBase64(MapString, String goodsInfo) {BASE64Encoder encoder new BASE64Encoder();logger.info(模拟生成淘宝商品base64海报);return encoder.encode(JSON.toJSONString(goodsInfo).getBytes());} }模拟登录、爬取信息、生成海报由三个实现类分别实现。 3.4 单元测试 ApiTest.java package com.lino.design.test;import com.lino.design.NetMall; import com.lino.design.impl.JDNetMall; import jdk.nashorn.internal.scripts.JD; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory;/*** description: 单元测试*/ public class ApiTest {private Logger logger LoggerFactory.getLogger(ApiTest.class);private String JD_URL https://item.jd.com/100008348542.html;private String TAO_BAO_URL https://detail.tmall.com/item.htm;private String DANG_DANG_URL http://product.dangdang.com/1509704171.html;Testpublic void test_NetMall() {NetMall netMall new JDNetMall(100001, ******);String base64 netMall.generateGoodsPoster(JD_URL);logger.info(测试结果{}, base64);} }测试类提供了三个商品连接也可以是其他商品的连接。爬取的成功模拟爬取京东商品可以替换为其他商品服务。new JDNetMall、 new DangDangNetMall 、 new TaoBaoNetMall 测试结果 10:36:08.491 [main] INFO com.lino.design.NetMall - 模拟京东用户登录 uId100001 uPwd****** 10:36:09.582 [main] INFO com.lino.design.NetMall - 模拟京东商品爬虫解析【AppleiPhone 11】Apple iPhone 11 (A2223) 128GB 黑色 移动联通电信4G手机 双卡双待【行情 报价 价格 评测】-京东 | 5999.00 元 https://item.jd.com/100008348542.html 10:36:09.582 [main] INFO com.lino.design.NetMall - 模拟生成京东商品base64海报 10:36:09.615 [main] INFO com.lino.design.test.ApiTest - 测试结果eyJwcmljZSI6IjU5OTkuMDAiLCJuYW1lIjoi44CQQXBwbGVpUGhvbmUgMTHjgJFBcHBsZSBpUGhv bmUgMTEgKEEyMjIzKSAxMjhHQiDpu5HoibIg56e75Yqo6IGU6YCa55S15LhNEfmiYvmnLog5YM 5Y2h5YM5b6F44CQ6KGM5oOFIOaKpeS7tyDku7fmoLwg6KE5rWL44CRLeS6rOS4nCJ9四、总结模板模式 通过上面的实现可以看到 模板模式 在定义统一结构也就是执行标准上非常方便。 也就很好的控制了后续的实现这不用关心调用逻辑按照统一方式执行。那么类的继承者只需要关心具体的业务逻辑实现即可。 模板模式也是对了解决子类通用方法放到父类中设计的优化。让每一个子类只做子类需要完成的内容而不需要关心其他逻辑。 这样提取公共代码行为由父类管理扩展可变部分也就非常有利于开发拓展和迭代。
http://www.zqtcl.cn/news/552807/

相关文章:

  • 用阳寿做交易的网站做网站公司 陕西渭南
  • 携程旅行网网站策划书外贸网站如何做seo
  • 网站网站制作需要多少钱沧州新增最新
  • 有什么做兼职的网站wordpress 视频站模版
  • 做信息图的网站有哪些网站建设百度经验
  • zhihe网站建设 淘宝龙岗网站建设哪家好
  • 微信h5商城网站枣庄建设工程管理局网站
  • 做弹弓教程网站旺道seo怎么优化网站
  • 监理公司宣传册设计样本杭州优化seo公司
  • 佛山优化网站关键词衡水专业做网站
  • 京东alexa排名seo发外链网站
  • 中国工业设计网站制作网页版权怎么修改
  • 贞丰县建设局网站一般的电脑培训班要多少钱
  • 模板网站建设清单太原网站制作电话
  • 网站建设的需求要素设计企业网站机
  • 深圳百度推广电话西安官网seo技术
  • 沈阳建站免费模板福州建设企业
  • 怎么在百度首页做网站wordpress返回前页
  • 张家口城乡建设局网站wordpress 等待响应
  • 专门设计网站的公司叫什么怎么做网站多少钱
  • 淡水网站建设健身器材 网站模版
  • 河南建设网站公司简介做新闻类网站需要什么资质
  • 网络文化经营许可证图片下载优化大师安装桌面
  • 网站cms系统教育网站开发文档
  • 用网站做淘客怎么做网站建设在电访销售话术
  • 做电影网站赚了几百万动画制作流程
  • 怎么做企业的网站首页wordpress 主机迁移
  • 网站常见问题网页设计代码开头
  • 聊城网站推广品牌推广计划描述
  • 池州网站制作优化有没有专业做特产的网站