[Design-Pattern]工厂模式

Java版本

 1 package interfaces;2 3 interface Service {4     void method1();5     void method2();6 } 7 8 interface ServiceFactory { 9  Service getService(); 10 } 11 12 class Implementation1 implements Service { 13  Implementation1() {} 14 public void method1() { System.out.println("Implementation1 method1"); } 15 public void method2() { System.out.println("Implementation1 method2"); } 16 } 17 18 class Implementation1Factory implements ServiceFactory { 19 public Service getService() { 20 return new Implementation1(); 21  } 22 } 23 24 class Implementation2 implements Service { 25  Implementation2() {} 26 public void method1() { System.out.println("Implementation2 method1"); } 27 public void method2() { System.out.println("Implementation2 method2"); } 28 } 29 30 class Implementation2Factory implements ServiceFactory { 31 public Service getService() { 32 return new Implementation2(); 33  } 34 } 35 36 public class Factories { 37 public static void serviceConsumer(ServiceFactory fact) { 38 Service s = fact.getService(); 39  s.method1(); 40  s.method2(); 41  } 42 public static void main(String[] args) { 43 serviceConsumer(new Implementation1Factory()); 44 serviceConsumer(new Implementation2Factory()); 45  } 46 }

C++版本

 1 #include <stdio.h>2 3 class Service {4 public:5     virtual void method1() = 0;6     virtual void method2() = 0;7 }; 8 9 class ServiceFactory { 10 public: 11 virtual Service* getService() = 0; 12 }; 13 14 class Implementation1 :public Service { 15 public: 16  Implementation1() {} 17 virtual void method1() { printf("Implementation1 method1\n"); } 18 virtual void method2() { printf("Implementation1 method2\n"); } 19 }; 20 21 class Implementation2 :public Service { 22 public: 23  Implementation2() {} 24 virtual void method1() { printf("Implementation2 method1\n"); } 25 virtual void method2() { printf("Implementation2 method2\n"); } 26 }; 27 28 class Implementation1ServiceFactory :public ServiceFactory { 29 public: 30  Implementation1ServiceFactory() {} 31 virtual Service* getService() { 32 return new Implementation1(); 33  } 34 }; 35 36 class Implementation2ServiceFactory :public ServiceFactory { 37 public: 38  Implementation2ServiceFactory() {} 39 virtual Service* getService() { 40 return new Implementation2(); 41  } 42 }; 43 44 void serviceConsumer(ServiceFactory* fact) { 45 Service* s = fact->getService(); 46 s->method1(); 47 s->method2(); 48 } 49 50 int main() 51 { 52 serviceConsumer(new Implementation1ServiceFactory()); 53 serviceConsumer(new Implementation2ServiceFactory()); 54 return 0; 55 }

Java使用匿名内部类后的版本

 1 package innerclasses;2 3 interface Service {4     void method1();5     void method2();6 } 7 8 interface ServiceFactory { 9  Service getService(); 10 } 11 12 class Implementation1 implements Service { 13 private Implementation1() {} 14 public void method1() { System.out.println("Implementation1 method1"); } 15 public void method2() { System.out.println("Implementation1 method2"); } 16 public static ServiceFactory factory = new ServiceFactory() { 17  @Override 18 public Service getService() { 19 return new Implementation1(); 20  } 21  }; 22 } 23 24 class Implementation2 implements Service { 25 private Implementation2() {} 26 public void method1() { System.out.println("Implementation2 method1"); } 27 public void method2() { System.out.println("Implementation2 method2"); } 28 public static ServiceFactory factory = new ServiceFactory() { 29  @Override 30 public Service getService() { 31 return new Implementation2(); 32  } 33  }; 34 } 35 36 public class Factories { 37 public static void serviceConsumer(ServiceFactory fact) { 38 Service s = fact.getService(); 39  s.method1(); 40  s.method2(); 41  } 42 public static void main(String[] args) { 43  serviceConsumer(Implementation1.factory); 44  serviceConsumer(Implementation2.factory); 45  } 46 }

可以看出,Java在使用了匿名内部类后,代码明显少了很多,省去了Implementation1ServiceFactory、Implementation2ServiceFactory类的创建。

转载于:https://www.cnblogs.com/brianyi/p/6565191.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/572642.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机应用基础文字处理软件应用职高PPT,《计算机应用基础》职高2010修订版_教(学)案...

《计算机应用基础》职高2010修订版_教(学)案 (93页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;39.9 积分&#xfeff;. .《计算机应用基础》职高2010修订版 教案第一章 计算机基础知识第二章 中文…

快速排序【记录一下代码】

本文仅用作学习记录&#xff0c;大神勿喷O(∩_∩)O~ 代码一、百度百科C语言版本代码,参考数据结构p274(清华大学出版社&#xff0c;严蔚敏) 1 void Qsort1(int a[], int low, int high)//百度百科C语言版本代码 2 {/*参考数据结构p274(清华大学出版社&#xff0c;严蔚敏)*/3 …

计算机图学测试题及答案,《计算机图形学》练习测试题及参考答案

A 29、下列有关平面几何投影的叙述语句中&#xff0c;正确的论述为( ) A) 在平面几何投影中&#xff0c;若投影中心移到距离投影面无穷远处&#xff0c;则成为平行投影&#xff1b; B) 透视投影与平行投影相比&#xff0c;视觉效果更有真实感&#xff0c;而且能真实地反映物体的…

eclipse 修改java代码不重启服务器 生效配置

1.本文目的&#xff1a;用tomcat进行web开发时&#xff0c;修改Java代码往往要重启代码&#xff0c;当工程较大启动较慢时&#xff0c;严重影响效率&#xff0c;本文通过eclipse下tomcat开发和发布web程序时&#xff0c;对一些Java代码一般修改&#xff08;不是增减方法、变量&…

多媒体微型计算机必不可少的硬件,第1章计算机基础知识习题材料.doc

第三部分 习 题第1章1计算机基础知识一、单项选择题1&#xff0e;通常人们普遍使用的电子计算机是( )。A&#xff0e;数字电子计算机B&#xff0e;模拟电子计算机C&#xff0e;数字模拟混合电子计算机D&#xff0e;以上都不对2&#xff0e;世界上第一台电子计算机研制成功的时间…

Shell第二篇:正则表达式和文本处理工具

一 什么是正则 正则就是用一些具有特殊含义的符号组合到一起&#xff08;称为正则表达式&#xff09;来描述字符或者字符串的方法。或者说&#xff1a;正则就是用来描述一类事物的规则。 生活中处处都是正则&#xff1a; 比如我们描述&#xff1a;4条腿 你可能会想到的是四条腿…

计算机二级办公软件高级应用难不难,计算机二级office难吗 考试内容是什么

相信很多的在校大学生或者已经开始工作的小伙伴都会有考虑过要考国二MsOffice高级应用考试&#xff0c;那么&#xff0c;计算机二级office难吗&#xff1f;考试内容是什么&#xff1f;计算机二级office难吗许多考生基础差&#xff0c;考生缺乏备考计划&#xff0c;超过70%的考生…

vue.js指令v-model实现方法

原文链接&#xff1a;http://www.jb51.net/article/99097.htm V-MODEL 是VUE 的一个指令&#xff0c;在input 控件上使用时&#xff0c;可以实现双向绑定。 通过看文档&#xff0c;发现他不过是一个语法糖。 实际是通过下面的代码来实现的&#xff1a; <% page language&quo…

山西财大华商学院计算机系,山西财经大学华商学院

山西财经大学华商学院&#xff0c;位于山西省太原市&#xff0c;是经国家教育部正式批准设立&#xff0c;由山西财经大学在2002年举办的一所全日制本科院校&#xff0c;学院紧邻山西财经大学主校区&#xff0c;目前在校学生4500余人。山西财经大学是新中国成立后建校最早的财经…

sed 解释正则表达式

以/etc/passwd文件为模板 1&#xff0c;删除文件每行的第一个字符。 2&#xff0c;删除文件每行的第二个字符。 3&#xff0c;删除文件每行的最后一个字符。 4&#xff0c;删除文件每行的倒数第二个字符。 5&#xff0c;删除文件每行的第二个单词。 转载于:https://www.cnblogs…

计算机usb无法读取u盘启动,U盘中毒后造成U盘启动盘制作失败usb无法识别的解决办法...

我们想用U盘作为装系统的工具&#xff0c;必须先保证U盘的安全才能作为U盘启动盘使用&#xff0c;如果U盘一旦损坏&#xff0c;将造成USB无法识别&#xff0c;装系统也就无从下手&#xff0c;下面先讲下U盘中毒后造成U盘损坏usb无法识别的情况&#xff1a;1、识别U盘速度变得缓…

在windows下codeblocks中配置pthread库

转自&#xff1a;http://blog.csdn.net/u013172314/article/details/50846198 如果添加方法不正确&#xff0c;可能会出现pthread_create’未定义的引用&#xff0c;所以下面我讲一下正确的配置方法。 首先介绍一下我的安装平台和需要下载的工具包&#xff1a; win7 64位&#…

吕帅 计算机学院,刘磊-吉林大学计算机科学与技术学院

在《Journal of Systems and Software》、《Pattern Recognition》、《计算机学报》、《软件学报》等国内外期刊和会议上累计发表学术论文180余篇&#xff0c;其中&#xff1a;SCI检索论文40余篇、EI检索论文100余篇。主要代表性学术论文(SCI检索学术论文、国内权威期刊论文)&a…

河南科技大学计算机基础题库,河南科技大学大学计算机基础Excel基本操作选择题汇总...

Excel基本操作1、在Excel工作表的单元格中&#xff0c;如要输入数字字符串100083(邮政编码)时&#xff0c;应输入____C___。A) 100083 B) "100083" C) 100083 D) 1000832、在单元格B1中输入数值2&#xff0c;B2中输入数值3.5&#xff0c;选定单元格区域 B1:B5&#x…

[Android-Appium]: 安卓自动化测试: 环境准备

安卓自动化测试&#xff1a;环境的准备&#xff1a; 在做安卓自动化测试之前&#xff0c;需要在你的电脑上做如下环境的准备&#xff0c; 我用的是 Appium做的自动化测试。 安装Appium server&#xff0c; 安装路径&#xff1a;http://appium.io/ https://bitbucket.org/app…

计算机考研8,计算机考研每日一练:第八天

平衡二叉树实现原理平衡二叉树构建的基本思想就是在构建二叉排序树的过程中&#xff0c;每当插入一个结点时&#xff0c;先检查是否因插入而破坏了树的平衡性&#xff0c;若是&#xff0c;则找出最小不平衡子树。在保持二叉排序树特性的前提下&#xff0c;调整最小不平衡子树中…

Python全栈开发:web框架们

Python的WEB框架 Bottle Bottle是一个快速、简洁、轻量级的基于WSIG的微型Web框架&#xff0c;此框架只由一个 .py 文件&#xff0c;除了Python的标准库外&#xff0c;其不依赖任何其他模块。 1234pip install bottleeasy_install bottleapt-get install python-bottlewget htt…

jsoup 去除html标签,如何使用jsoup取消注释html标签

Kai Sternad..7对的,这是可能的.以下是解决此问题的一种方法:查找所有评论节点对于每个注释,提取数据属性在当前注释节点之后插入包含数据的新节点删除注释节点看看这段代码:public class UncommentComments {public static void main(String... args) {String htmlIn "&…

软件测试实验二

1.百度搜索seleniumIDE&#xff0c;进入官网http://www.seleniumhq.org/download/下载区下载软件 2.使用seleniumIDE录制脚本&#xff0c;打开IDE&#xff0c;录制脚本&#xff0c;并测试脚本 3.导出脚本&#xff0c;完成实验 转载于:https://www.cnblogs.com/wyp-run/p/661974…

计算机在管理会计应用中的作用,信息化在管理会计中的作用

信息化在管理会计中的作用在管理会计的日常工作中&#xff0c;需要进行大量的数据收集整理工作&#xff0c;会出现漏算错算等情况&#xff0c;加强管理会计软件的创新和研发&#xff0c;从而推进企业会计电算化。摘要:较比以往&#xff0c;信息技术不断发展&#xff0c;在人们的…