- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在浏览 HackerRank,并有一个关于工厂设计模式或工厂类的快速问题。我正在经历一个基本的挑战( https://www.hackerrank.com/challenges/java-factory/problem )并能够解决它(代码如下所示)。我编写了下面注释所示的代码部分,其余部分已提供。
import java.util.*;
import java.security.*;
interface Food {
public String getType();
}
class Pizza implements Food {
public String getType() {
return "Someone ordered a Fast Food!";
}
}
//I implemented the part starting here
class Cake implements Food {
public String getType() {
return "Someone ordered a Dessert!";
}
}
class FoodFactory {
public Food getFood(String order) {
if (order.equalsIgnoreCase("Pizza")){
return new Pizza();}
else return new Cake();
}//End of getFood method; this is the end of the part I implemented
}//End of factory class
public class Solution {
public static void main(String args[]){
Do_Not_Terminate.forbidExit();
try{
Scanner sc=new Scanner(System.in);
//creating the factory
FoodFactory foodFactory = new FoodFactory();
//factory instantiates an object
Food food = foodFactory.getFood(sc.nextLine());
System.out.println("The factory returned "+food.getClass());
System.out.println(food.getType());
}
catch (Do_Not_Terminate.ExitTrappedException e) {
System.out.println("Unsuccessful Termination!!");
}
}
}
我花了相当多的时间阅读工厂设计模式的几个在线示例,但我并不清楚工厂模式的目的是什么以及它为什么有益或它简化了什么/它正在解决什么问题。同样,尝试这个实际的例子并没有完全向我阐明这个问题。
有人可以用非常基本的方式解释这一点吗?类似地,使用工厂模式的替代方案是什么?也许本练习中提供的代码过于简化了问题,这就是为什么我不清楚工厂完成了什么。感谢您的帮助,因为一些现实世界的颜色会有很大帮助。我已经阅读了各种设计模式并知道它们是什么,但我对这个问题的理解不够充分,因为现实世界的经验有限
最佳答案
工厂的基本思想有两点:
为什么你首先需要工厂?那么最简单的答案是您可以控制对象的创建。
让我们举一个现实世界的例子:
您想为您的应用程序编写分析。您很高兴编写一个类来实现您使用的一些分析库。并检查所有应用程序并编写 AnalyticsEventManager().sendEvent(blabla)
这有什么问题吗?
井工厂来救援。
而不是AnalyticsEventManager().sendEvent(blabla)
您编写一个具有“sendEvent”
方法的接口(interface)
interface AnalyticEventSender {
void sendEvent(String eventData);
}
然后你有一些实现此分析的不同类的实例
class FacebookAnalytic implements AnalyticEventSender {
@Override
public void sendEvent(String eventData){
System.out.println("I am facebook analytics sender:" + eventData);
}
}
那么你就有了
class TestAnalytic implements AnalyticEventSender {
@Override
public void sendEvent(String eventData){
System.out.println("I am test analytics sender:"+eventData);
}
}
然后你就有了分析工厂
class AnalyticFactory {
public static AnalyticEventSender create(){
if(allowFacebookAnalytic){
return new FacebookAnalytic();
}else {
return new TestAnalytic();
}
}
}
就像这样,您可以根据某个 boolean 值替换分析的所有实例(更改分析的原因取决于编写代码的人的判断)
现在您可以编写AnalyticFactory.create().sendEvent(blabla),而不是执行
AnalyticEventManager().sendEvent
现在,如果您想检查事件是否实际按照您希望的方式打印,您只需用 TestAnalytic 替换工厂中返回的实例并检查事件是否已打印,而无需实际打印浏览真实的 Facebook 模块。
这对于许多其他应用程序都是如此,而不仅仅是分析。
关于java - Java工厂设计模式或工厂类讲解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61097417/
1、流程控制语句主要有if、ii...else、elseif(有时也可以写成else if)、switch四种。 PHP中语句格式为: if(条件满足) {执行语句} if(条件满足) {执行
目录 DFS初步概念 DFS例题-迷宫游戏 题目描述 输入输出格式 输入输出样例
This question两年前被问到,但它提到的资源要么不是很有帮助(恕我直言),要么链接不再有效。 必须有一些很好的教程才能理解 Phaser .我已经阅读了 javadoc,但我的眼睛呆滞了,因
This question两年前被问到,但它提到的资源要么不是很有帮助(恕我直言),要么链接不再有效。 必须有一些很好的教程才能理解 Phaser .我已经阅读了 javadoc,但我的眼睛呆滞了,因
这个正则出自这个网站 http://www.regexlab.com/zh/regref.htm 正向预搜索:"(?=xxxxx)","(?!xxxxx)"
chr(9)、chr(10)、chr(13)、chr(32)、chr(34) 所有关于 ASCII码的表格:[url]http://www.asciitable.com/[/url] chr(13)
我是一名优秀的程序员,十分优秀!