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

中国互联网站建设广东微信网站制作公司

中国互联网站建设,广东微信网站制作公司,云开发小程序源码,陶瓷 中企动力 网站建设文章目录 一、介绍二、基本组件三、演示案例1. 定义抽象工厂2. 定义抽象产品3. 定义具体工厂4. 定义具体产品5. 代码演示6. 代码改造 四、总结 一、介绍 抽象工厂模式(Abstract Factory Pattern)属于创建型设计模式。用于解决比工厂方法设计模式更加复杂的问题。 复杂到哪里了… 文章目录 一、介绍二、基本组件三、演示案例1. 定义抽象工厂2. 定义抽象产品3. 定义具体工厂4. 定义具体产品5. 代码演示6. 代码改造 四、总结 一、介绍 抽象工厂模式(Abstract Factory Pattern)属于创建型设计模式。用于解决比工厂方法设计模式更加复杂的问题。 复杂到哪里了呢 我们将抽象工厂模式和工厂模式进行简单的比较或许可以有更好的理解 工厂方法设计模式中指定工厂只能创建对应的单个产品是一对一的关系。抽象工厂模式中不仅需要创建产品的工厂还多了一个创建工厂的工厂(顶级工厂)。当顶级工厂创建一个工厂时顶级工厂与工厂是一对一的关系(等同于工厂模式)被创建的工厂可以生产多个产品因此顶级工厂与产品之间是一对多的关系。 二、基本组件 在我们使用抽象工厂设计模式时一般需要以下组件 抽象工厂工厂实现抽象产品产品实现 一般来讲从抽象工厂中获取的对象类型为抽象类型其具体类型由具体的工厂实现决定。 三、演示案例 唉到了结婚的年纪了我们就以结婚为例吧。 1. 定义抽象工厂 结婚是一件十分麻烦的事情需要准备非常非常多的事情比如婚车、婚房、婚纱照等等。所以我们以结婚为工厂以婚车婚房婚纱照为产品。先对结婚这件事情做一个规范的定义。 public interface MarriageFactory {/*** 产品 - 婚车*/Car getCar();/*** 产品 - 婚房*/House getHouse();/*** 产品 - 婚纱照*/Picture getPicture();}2. 定义抽象产品 婚车 public interface Car {/*** 坐婚车*/void drive(); }婚房 public interface House {/*** 买房*/void buyHouse(); }婚纱照 public interface Picture {/*** 照相*/void takePicture(); }3. 定义具体工厂 我们结婚一般都是要找一个婚庆公司假设婚庆公司都提供结婚的一条龙服务包括婚车、婚房、婚纱照等业务现在我们城里有两家婚庆公司汤姆婚庆(TomFactory) 和 杰瑞婚庆(JerryFactory)。 汤姆婚庆(TomFactory) 汤姆婚庆公司提供具有汤姆特色的业务如汤姆婚车(TomCar)、汤姆婚房(TomHouse)、汤姆照相(TomPicture)。 public class TomFactory implements MarriageFactory {public TomFactory() {System.out.println(选择了汤姆婚庆公司);}Overridepublic Car getCar() {return new TomCar();}Overridepublic House getHouse() {return new TomHouse();}Overridepublic Picture getPicture() {return new TomPicture();} }杰瑞婚庆(JerryFactory) 杰瑞婚庆公司提供具有杰瑞特色的业务如杰瑞婚车(TomCar)、杰瑞婚房(TomHouse)、杰瑞照相(TomPicture)。 public class JerryFactory implements MarriageFactory {public JerryFactory() {System.out.println(选择了杰瑞婚庆公司);}Overridepublic Car getCar() {return new JerryCar();}Overridepublic House getHouse() {return new JerryHouse();}Overridepublic Picture getPicture() {return new JerryPicture();} }4. 定义具体产品 汤姆婚庆公司提供具有汤姆特色的业务如汤姆婚车(TomCar)、汤姆婚房(TomHouse)、汤姆照相(TomPicture)。 public class TomCar implements Car{/*** 婚车*/Overridepublic void drive() {System.out.println(汤姆婚车开起来...);} }public class TomHouse implements House{/*** 买房*/Overridepublic void buyHouse() {System.out.println(汤姆一品房价50w.....);} }public class TomPicture implements Picture{/*** 照相*/Overridepublic void takePicture() {System.out.println(汤姆照相馆照相.....);} }杰瑞婚庆公司提供的业务具有杰瑞特色如杰瑞婚车(TomCar)、杰瑞婚房(TomHouse)、杰瑞照相(TomPicture)。 public class JerryCar implements Car{/*** 婚车*/Overridepublic void drive() {System.out.println(杰瑞婚车开起来...);} }public class JerryHouse implements House{/*** 买房*/Overridepublic void buyHouse() {System.out.println(杰瑞一品房价30w...);} }public class JerryPicture implements Picture{/*** 照相*/Overridepublic void takePicture() {System.out.println(杰瑞照相馆照相.....);} }5. 代码演示 下面我们对上述案例进行代码演示 选择杰瑞婚庆公司 public static void main(String[] args) {// 选择杰瑞婚庆公司MarriageFactory factory new JerryFactory();Car car factory.getCar();House house factory.getHouse();Picture picture factory.getPicture();car.drive();house.buyHouse();picture.takePicture(); }输出结果 选择汤姆婚庆公司 public static void main(String[] args) {// 选择杰瑞婚庆公司MarriageFactory factory new TomFactory();Car car factory.getCar();House house factory.getHouse();Picture picture factory.getPicture();car.drive();house.buyHouse();picture.takePicture(); }输出结果 6. 代码改造 在上面的测试代码中我们注意到我们只是对new 婚庆公司的实际类型做了修改而产品相关代码没有任何改动。于是我们可以将对婚庆公司的实例化过程按照工厂方法设计模式那样转移到工厂中只需要抽象工厂根据传入的参数返回不同的工厂实例即可。 在抽象工厂中添加静态方法getInstance() 和 枚举类MarriageType static MarriageFactory getInstance(MarriageType type) {if (type.equals(MarriageType.JERRY)) {return new JerryFactory();}return new TomFactory(); }enum MarriageType {JERRY,TOM; }修改测试代码 public static void main(String[] args) {// 选择杰瑞婚庆公司MarriageFactory factory MarriageFactory.getInstance(MarriageFactory.MarriageType.JERRY);Car car factory.getCar();House house factory.getHouse();Picture picture factory.getPicture();car.drive();house.buyHouse();picture.takePicture(); }另外在静态方法getInstance() 中我们可以再次结合单例模式来避免频繁实例化婚庆公司对象。 四、总结 抽象工厂与工厂方法的最主要区别就是抽象工厂允许创建多个产品而工厂方法只允许创建一个产品。该设计模式有一个致命缺点每当我们在工厂中添加新的产品时工厂的抽象和具体实现都需要修改。当工厂的具体实现较多时每一个实现都必须适配新添加的产品。 纸上得来终觉浅绝知此事要躬行。 ————————我是万万岁我们下期再见————————
http://www.dnsts.com.cn/news/223724.html

相关文章:

  • 做一视频网站列出网站开发建设的步骤
  • 公司网站怎么做才能有官网二字校园网站建设年度工作计划
  • 房山青岛网站建设响应式网站的研究意义
  • 福州思企互联网站建设公司怎么样哪里有网站开发定制
  • 成都建设网站标化最新表格wordpress 文章点击排行
  • 注册公司网站模板android开发技术
  • 做六个网站静态页多少钱wordpress 图片加链接地址
  • 苏州企业网站制作电话king 主题WordPress
  • 手机网站怎么做微信登陆2022国内外重大新闻事件10条
  • 餐饮网站建设需求分析网站服务器如何做端口映射
  • 合适的网站建设明细报价表网站开发 图片服务器
  • 做果蔬行业的网站做网站一般分几种
  • 怎么申请网站空间域名wordpress 文章调用js
  • 江苏建设省直报名网站做网站单页
  • 网站备案的规定ui毕业设计代做网站
  • 网站域名证书查询wordpress页面侧边栏消失
  • 建设工程168网站如何做内容收费的网站
  • 大型网站建设兴田德润优惠西安网站制作模板
  • 哪一个网站做专栏作家好点安康平台介绍
  • 无线设置网站中国建筑人才培训网
  • h5免费制作网站模板永康企业网站建设
  • html5手机微网站模板wordpress设计类网站
  • 做网站应该用什么配置的电脑凡科做网站是否安全
  • 网站虚拟机从头做有影响吗上海站有云网络科技有限公司
  • 合肥哪里有建站公司如何绑定网站域名
  • 我的网站为什么打不开怎么回事张家界企业网站制作
  • 襄阳微信网站建设创业项目网
  • 网页制作素材按钮图标郑州seo教程
  • 武威百度做网站多少钱seo诊断书案例
  • 象山县建设管理局网站网络软文写作