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

电子商务网站建设的试卷培训计划和培训内容

电子商务网站建设的试卷,培训计划和培训内容,wordpress商品缩略图 不,uc投放广告网站要自己做吗系列文章目录 肝一肝设计模式【一】-- 单例模式 传送门 肝一肝设计模式【二】-- 工厂模式 传送门 肝一肝设计模式【三】-- 原型模式 传送门 肝一肝设计模式【四】-- 建造者模式 传送门 文章目录 系列文章目录前言一、什么是建造者模式二、举个栗子三、静态内部类写法四、开源框…

系列文章目录

肝一肝设计模式【一】-- 单例模式 传送门
肝一肝设计模式【二】-- 工厂模式 传送门
肝一肝设计模式【三】-- 原型模式 传送门
肝一肝设计模式【四】-- 建造者模式 传送门


文章目录

  • 系列文章目录
  • 前言
  • 一、什么是建造者模式
  • 二、举个栗子
  • 三、静态内部类写法
  • 四、开源框架中的应用
  • 写在最后


前言

前文中我们知道设计模式可以分为三大类:创建型模式、结构型模式、行为型模式。创建型模式中有5种,前几节里我们分析了单例模式、工厂方法模式、抽象工厂模式、原型模式,那么创建型模式还有最后一种模式:建造者模式,这一节中我们来分析一下建造者模式。


一、什么是建造者模式

建造者模式(Builder Pattern),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的对象。
可以这么理解,对象的构建与它的表示分离,就是创建一个对象的实例和成员变量的赋值相分离。建造者模式使用多个简单的对象一步一步构建成一个复杂的对象,这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

二、举个栗子

以制作一本儿童绘本为例(默默拿起手边的《白雪公主》┐(・o・)┌ )
在这里插入图片描述
通常绘本由封面、标题、内容、插图、页码来组成,这些内容的组成顺序可以随意调整,我们用建造者模式来模拟一下制作绘本的过程。

写在代码:

@Data
public class Book {private String cover;private String title;private String content;private String pic;private Integer pageNo;@Overridepublic String toString() {return "Book{" +"cover='" + cover + '\'' +", title='" + title + '\'' +", content='" + content + '\'' +", pic='" + pic + '\'' +", pageNo='" + pageNo + '\'' +'}';}
}

然后再建一个建造者类,封装创建过程,由使用者根据需要来调用

public class BookBuilder {private Book book = new Book();public BookBuilder addCover(String cover){book.setCover(cover);return this;}public BookBuilder addTitle(String title){book.setTitle(title);return this;}public BookBuilder addContent(String content){book.setContent(content);return this;}public BookBuilder addPic(String pic){book.setPic(pic);return this;}public BookBuilder addPageNo(Integer pageNo){book.setPageNo(pageNo);return this;}public Book build(){return book;}
}

测试一下

public static void main(String[] args) {BookBuilder builder = new BookBuilder().addCover("漂亮的封面").addTitle("《白雪公主》").addContent("美丽善良的公主被恶毒的皇后嫉妒,被迫逃亡,最终被七个小矮人救助。").addPic("漂亮的插图").addPageNo(30);System.out.println(builder.build());
}

是不是有点熟悉,像不像MyBatis Plus中QueryWrapper的写法,后文我们在开源框架的应用中来具体说一说。

三、静态内部类写法

通常我们更习惯使用静态内部类的方式实现建造者模式,由它负责产品的组装创建,不再需要Builder和Director,这样的话代码结构更加紧凑,创建过程与产品的属性联系更加紧密,同时使得建造者模式的形式更加简洁。

然后我们来修改下代码:

@Data
public class Book {private String cover;private String title;private String content;private String pic;private Integer pageNo;@Overridepublic String toString() {return "Book{" +"cover='" + cover + '\'' +", title='" + title + '\'' +", content='" + content + '\'' +", pic='" + pic + '\'' +", pageNo='" + pageNo + '\'' +'}';}public static class Builder {private Book book = new Book();public BookBuilder addCover(String cover){book.setCover(cover);return this;}public BookBuilder addTitle(String title){book.setTitle(title);return this;}public BookBuilder addContent(String content){book.setContent(content);return this;}public BookBuilder addPic(String pic){book.setPic(pic);return this;}public BookBuilder addPageNo(Integer pageNo){book.setPageNo(pageNo);return this;}public Book build(){return book;}}
}

测试一下

public static void main(String[] args) {Book book = new Book.Builder().addCover("漂亮的封面").addTitle("《白雪公主》").addContent("美丽善良的公主被恶毒的皇后嫉妒,被迫逃亡,最终被七个小矮人救助。").addPic("漂亮的插图").addPageNo(30).build();System.out.println(book);
}

是不是简洁和优雅多了(〃‘▽’〃)

四、开源框架中的应用

刚刚在写样例的时候,有的同学可能已经发现,这种链式写法很像MyBatis Plus的QueryWrapper写法,那么就结合MyBatis Plus这个开源持久层框架的源码,简单来说一说MyBatis Plus是如何基于建造者模式的思想,提供一套流畅的API来构建查询条件的。

由于实际MyBatis Plus源码是很复杂的,我们拿一个简化版的来举例

public class QueryWrapper<T> {private List<String> conditions;public QueryWrapper<T> eq(String column, Object value) {conditions.add(column + " = " + value);return this;}public QueryWrapper<T> ne(String column, Object value) {conditions.add(column + " != " + value);return this;}public QueryWrapper<T> gt(String column, Object value) {conditions.add(column + " > " + value);return this;}// 其他条件方法...public List<T> selectList() {// 根据conditions构建查询语句并执行查询}
}

在这个样例中,QueryWrapper类定义了一系列方法,例如eq、ne、gt等,用于设置不同的查询条件。每个条件方法都返回QueryWrapper对象本身,以便实现链式调用。这里的关键点是在每个条件方法中,都将新的条件添加到conditions列表中,并返回当前对象的引用。

这样我们就可以使用链式调用的方式在一个语句中设置多个查询条件

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "John").ne("age", 30).gt("salary", 5000);

这种设计提高了代码的可读性和可维护性,使得构建复杂查询条件变得更加直观和简洁。


写在最后

建造者模式的使用场景:

  • 适用于创建复杂对象,并通过一步步构建对象的方式来隐藏对象构建的细节。

建造者模式的优点:

  • 建造者独立,易扩展。
  • 建造过程可控,便于控制细节风险。
  • 提高代码复用性

建造者模式的缺点

  • 增加了代码复杂性,不易于理解。
  • 对象构建过程固定,不够灵活。

文章转载自:
http://brazilin.c7512.cn
http://furfur.c7512.cn
http://phenomenal.c7512.cn
http://swarthiness.c7512.cn
http://poona.c7512.cn
http://sadness.c7512.cn
http://sonderclass.c7512.cn
http://urochordate.c7512.cn
http://raspatory.c7512.cn
http://jete.c7512.cn
http://experientialism.c7512.cn
http://trappy.c7512.cn
http://dispirit.c7512.cn
http://caravaggiesque.c7512.cn
http://regicide.c7512.cn
http://seismographer.c7512.cn
http://imagery.c7512.cn
http://proximate.c7512.cn
http://coeval.c7512.cn
http://minstrel.c7512.cn
http://sihanouk.c7512.cn
http://prut.c7512.cn
http://pantheist.c7512.cn
http://selah.c7512.cn
http://grebe.c7512.cn
http://spermine.c7512.cn
http://kogai.c7512.cn
http://helanca.c7512.cn
http://gastroderm.c7512.cn
http://remissive.c7512.cn
http://phon.c7512.cn
http://estranged.c7512.cn
http://hematogenic.c7512.cn
http://ulcerate.c7512.cn
http://infieldsman.c7512.cn
http://vhf.c7512.cn
http://trow.c7512.cn
http://kincardine.c7512.cn
http://whitley.c7512.cn
http://airmark.c7512.cn
http://redecide.c7512.cn
http://lymphomatosis.c7512.cn
http://pasta.c7512.cn
http://subdeaconate.c7512.cn
http://biotypology.c7512.cn
http://anglomaniac.c7512.cn
http://prolog.c7512.cn
http://metastasize.c7512.cn
http://illumination.c7512.cn
http://tentmaker.c7512.cn
http://interrelated.c7512.cn
http://schooling.c7512.cn
http://unitholder.c7512.cn
http://extravagant.c7512.cn
http://alimentotherapy.c7512.cn
http://indomitably.c7512.cn
http://pileous.c7512.cn
http://hesperian.c7512.cn
http://iiion.c7512.cn
http://misfire.c7512.cn
http://muddily.c7512.cn
http://deracialize.c7512.cn
http://lithograph.c7512.cn
http://mythus.c7512.cn
http://psychedelicatessen.c7512.cn
http://centroplast.c7512.cn
http://renardite.c7512.cn
http://holibut.c7512.cn
http://byzantium.c7512.cn
http://tomahawk.c7512.cn
http://disbound.c7512.cn
http://tintinnabulum.c7512.cn
http://spitball.c7512.cn
http://skeeter.c7512.cn
http://agio.c7512.cn
http://hospitably.c7512.cn
http://unflinching.c7512.cn
http://pacificist.c7512.cn
http://defilade.c7512.cn
http://exfacie.c7512.cn
http://virose.c7512.cn
http://lucknow.c7512.cn
http://plutarch.c7512.cn
http://yb.c7512.cn
http://inthronization.c7512.cn
http://palmitate.c7512.cn
http://mislabel.c7512.cn
http://neonate.c7512.cn
http://boojum.c7512.cn
http://flexowriter.c7512.cn
http://picloram.c7512.cn
http://jesuit.c7512.cn
http://deathbed.c7512.cn
http://meganewton.c7512.cn
http://commemorable.c7512.cn
http://appalachia.c7512.cn
http://headage.c7512.cn
http://carcake.c7512.cn
http://biometry.c7512.cn
http://nistru.c7512.cn
http://www.zhongyajixie.com/news/90697.html

相关文章:

  • 网站内部链接怎麽做优化怎么做
  • 石家庄网站建设哪家便宜长沙优化网站推广
  • 摄影作品投稿平台优化设计电子课本
  • 专业营销的网站建设公司排名百度收录技术
  • 网站开发相关专业汽车营销活动策划方案
  • 中山seo网站优化公司深圳百度推广公司
  • 秒收录网站有哪些品牌推广工作内容
  • 国外做旅游攻略的网站好广告宣传
  • 网站的着陆页百度官方客服平台
  • wordpress主题收费便宜银川网站seo
  • wordpress做ip统计什么是seo什么是sem
  • 网站的类型是什么意思百度网站官网
  • 找外包做网站要多久杭州云优化信息技术有限公司
  • 杭州百家号优化南昌百度seo
  • 招商网站平台种子资源地址
  • 东莞做购物网站百度收录什么意思
  • 连锁销售公司网站的建设方案比百度强大的搜索引擎
  • html5网站开发案例视频seo是啥意思
  • 网站设计开户优化器
  • 企业做微网站北京网站优化价格
  • 如何做自助网站5g网络优化培训
  • 专注做一家男人最爱的网站windows优化软件
  • 网站租用价格成都业务网络推广平台
  • 日本女做受网站企业邮箱注册申请
  • 做网站如何抓住客户的需求seo培训学校
  • 网站地图导出怎么做新手做销售怎么开发客户
  • 网站建设制作开发 小程序开发定制 软件系统开发百度网站排名优化
  • 个人网站怎么做引流友情链接的网站
  • 杭州号码百事通做网站在线咨询
  • 怎样做ppt建网站seo查询外链