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

xp做网站深圳宝安做网站的公司

xp做网站,深圳宝安做网站的公司,php学什么可以做网站,东道设计地址前言 在上一篇中我们学习了单例模式#xff0c;介绍了单例模式创建的几种方法以及最优的方法。本篇则介绍设计模式中的工厂模式#xff0c;主要分为简单工厂模式、工厂方法和抽象工厂模式。 简单工厂模式 简单工厂模式是属于创建型模式#xff0c;又叫做静态工厂方法模式。…前言 在上一篇中我们学习了单例模式介绍了单例模式创建的几种方法以及最优的方法。本篇则介绍设计模式中的工厂模式主要分为简单工厂模式、工厂方法和抽象工厂模式。 简单工厂模式 简单工厂模式是属于创建型模式又叫做静态工厂方法模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。调用只需要告诉工厂类所需要的类型工厂类就会返回需要的产品类工厂的子类。 可以说是工厂模式中最简单的一种。 打个比方我们在电脑经常玩游戏我们只需要告诉电脑我们要玩什么游戏电脑就会打开这个游戏我们并不需要关心游戏是怎么运作的。 我们可以在以下的代码中进行相应的说明。 我们首先创建一个游戏总类接口包含一个玩游戏的方法 然后再由各自的游戏类继承该类并实现该类的方法最后在创建一个工程类根据不同的游戏进行创建对象。 那么实现的代码如下 代码示例 private static final String LOLLOL; private static final String DNFDNF; public static void main(String[] args) {Game game ComputerFactory.playGame(LOL);Game game2 ComputerFactory.playGame(DNF);game.play();game2.play();} }interface Game{void play(); }class LOL implements Game{Overridepublic void play() {System.out.println(正在玩LOL...);} }class DNF implements Game{Overridepublic void play() {System.out.println(正在玩DNF...);} }class ComputerFactory{private static final String LOLLOL; private static final String DNFDNF; public static Game playGame(String game){if(LOL.equalsIgnoreCase(game)){return new LOL();}else if(DNF.equalsIgnoreCase(game)){return new DNF();}return null;} 输出结果 正在玩LOL... 正在玩DNF...我们在使用简单工厂模式进行实现该功能之后会发现我们将游戏类的实例化放到了工厂类中实现隐藏了对象创建的细节并且不需要知道是怎么玩的只需要知道调用该工厂类就行了。而且方便切换因为只需更改工厂类传递的类型值就行了。 但是我们也发现一个问题如果我们需要新增一个游戏类那么需要新定义一个接口然后还要在工厂类中添加一个判断分支如果少量的话还好但是大量的话就比较麻烦了并且这也违背了开放-封闭原则。 工厂方法模式 工厂方法模式是 Java 中最常用的设计模式之一属于创建型模式。定义一个创建对象的接口让其子类自己决定实例化哪一个工厂类工厂模式使其创建过程延迟到子类进行。 在简单工厂模式中我们发现在添加子类的时候相应的也需要在工厂类中添加一个判断分支是违背了开放-封闭原则的。而工厂方法模式就是主要解决这个问题的。 这里还是用上述的玩游戏示例只不过这里每个游戏都是由各自的游戏工厂类实现。主要区别就是由一个 工厂类变成了多个了降低了耦合度。如果新增一个游戏类相应的也只需在新增一个工厂类而已 并且完美的遵循了开放-封闭原则。 将上述代码更改之后相应的代码实现如下 代码示例 private static final String LOLLOL; private static final String DNFDNF; private static final String WOWWOW; public static void main(String[] args) {Game game3new LOLFactory().playGame();Game game4new DNFFactory().playGame();Game game5new WOWFactory().playGame();game3.play();game4.play();game5.play(); }interface Game{void play(); }class LOL implements Game{Overridepublic void play() {System.out.println(正在玩LOL...);} }class DNF implements Game{Overridepublic void play() {System.out.println(正在玩DNF...);} }class WOW implements Game{Overridepublic void play() {System.out.println(正在玩WOW...);} }interface ComputerFactory2{Game playGame(String game); }class LOLFactory implements ComputerFactory2{Overridepublic Game playGame() {return new LOL();} }class DNFFactory implements ComputerFactory2{Overridepublic Game playGame() {return new DNF();} }class WOWFactory implements ComputerFactory2{Overridepublic Game playGame() {return new WOW();} }输出结果 正在玩LOL... 正在玩DNF... 正在玩WOW...可以看到使用工厂方法模式之后我们的代码更加清晰了扩展性也变高了如果想增加一个产品只要扩展一个工厂类就可以。但是随之而来的是在系统中增加了复杂度每增加一个产品时都需要增加一个具体类和对象实现工厂类。 所以在是否使用该模式需注意。 使用该模式比较经典的使用案例是大名鼎鼎的hibernate框架在选择数据库方言这块。但是如果直接简单的new一个对象的话则不必使用了若使用反而会增加系统的复杂度。 抽象工厂模式 抽象工厂模式是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式它提供了一种创建对象的最佳方式。也就是提供一个创建一系列相关或相互依赖对象的接口而无需指定它们具体的类。 抽象工厂模式相比工厂方法模式来说更加复杂也更难理解但是更容易扩展。 抽象工厂模式就将同一类的产品子类归为一类让他们继承同一个抽象子类然后把它们当作一组然后再把多个组组成一个族。 打个比方还是上述的玩游戏我们可以把LOL和WOW当作PVP类型的游戏也可以把DNF和WOW当作PVE类型的游戏。 那么相应更改的代码如下 代码示例 private static final String LOLLOL; private static final String DNFDNF; private static final String WOWWOW; public static void main(String[] args) {ComputerFactory3 cf3new PVPFactory();cf3.playGame().play();cf3.playGame2().play();ComputerFactory3 cf4new PVEFactory();cf4.playGame().play();cf4.playGame2().play(); } }interface Game{void play(); }class LOL implements Game{Overridepublic void play() {System.out.println(正在玩LOL...);} }class DNF implements Game{Overridepublic void play() {System.out.println(正在玩DNF...);} }class WOW implements Game{Overridepublic void play() {System.out.println(正在玩WOW...);} }interface ComputerFactory3{Game playGame();Game playGame2(); }class PVPFactory implements ComputerFactory3{Overridepublic Game playGame() {return new LOL();}Overridepublic Game playGame2() {return new WOW();} }class PVEFactory implements ComputerFactory3{Overridepublic Game playGame() {return new DNF();}Overridepublic Game playGame2() {return new WOW();}}输出结果 正在玩LOL... 正在玩WOW... 正在玩DNF... 正在玩WOW...在抽象工厂模式中可以在不需要知道产品是怎么样的只需知道是哪个工厂类就行了。我们也可以根据子类的共同的特性而将它们设计在一起组成一个相同类型组可以很方便的直接调用。但是相对的产品族比较难以扩展增加一个产品需要增加相应的接口和实现类。例如某个品牌的手机有不同系列每个系列有不同的型号如果只是增加型号的话比较容易但是相对的增加某个系列就比较麻烦了。 所以我们在使用抽象工厂模式也需要相应的结合实际场景来使用。
http://www.tj-hxxt.cn/news/222622.html

相关文章:

  • 做网站宽高怎么决定厦门seo顾问
  • 如何让百度搜到自己的网站网站免费诊断
  • 自己建站流程十堰seo
  • 微信公众号做电影网站要域名吗如何做好公司网站建设
  • 阿里云备案网站备案域名购买成品网站多少钱
  • 网站开发计入什么会计科目网站网页区别是什么
  • 永修建设局网站网站不要了该如何处理
  • 各大网站做推广的广告怎么做滨江区建设局网站
  • 都匀市建设局网站建筑人才网招聘官网登录
  • wap网站域名申请免费推广方式有哪些
  • 阿里云可以做网站吗中国建筑英才网官网手机版
  • 网站开发国际化许昌网页制作
  • 四川成都网站制作软件开发常用架构
  • 建站公司获客成本优速网站建设优化seo
  • 六安市裕安区建设局网站能够做网站的资质
  • 北京通信管理局网站备案处工信部域名备案信息查询
  • 唐山网站建设外包公司哪家好韩国还有机会出线吗
  • 个人网站备案填写哈尔滨公司建站模板
  • 做低价的跨境电商网站wordpress 京东插件
  • 网站是做流程图联想用来网站开发笔记本
  • 网站建设结构总结@安徽网站建设
  • 重庆做网站公司有哪些视频号下载器手机版
  • 如何百度收录自己的网站仲恺企业网站建设
  • 凡度网络北京网站建设公司wordpress导航样式
  • 有人用dw做网站吗商城类网站设计制作
  • 网站建设的流程与思路wordpress压缩数据库
  • 设计logo网站推荐哪种语言做网站最合适
  • 济宁软件开发网站建设网站播放图片多大合适
  • 正则表达式匹配网站成都网站建设专业乐云seo
  • 海西网站建设one dirve做网站