1.设计模式:
静态工厂方法模式,也叫做简单工厂模式。
2.个人理解
工厂指的是一个对象生产工厂,当需要那个操作,就去实例化对应的。
官方的好处: 更面向对象,易于扩展
条件:需要实例化的类有一个共同的基类
3.面试题:
使用java实现一个控制台程序,输入数字操作符然后计算出结果来。
emmo...
一般思路就是 用Scanner录入数字运算符,然后算就得了,如下
public class Computer {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请输入第一个数字:");
float firstNum = in.nextFloat();
System.out.println("请输入第二个数字:");
float secondNum = in.nextFloat();
System.out.println("请输入运算符号:");
String countQuato = in.next();
if("+".equals(countQuato)){
System.out.println("result : "+(firstNum+secondNum));
}else if("-".equals(countQuato)){
System.out.println("result : "+(firstNum-secondNum));
}else if("*".equals(countQuato)){
System.out.println("result : "+(firstNum*secondNum));
}else if("/".equals(countQuato)){
System.out.println("result : "+(firstNum/secondNum));
}
}
4.but
使用了简单工厂模式,瞬间逼格就不一样了,虽然代码量多了,但是。。。
提供一个接口:
public interface StaticOperation {
public abstract float getResult(float firstNumber,float secondNumber);
}
主体:
package com.begin21.top.StaticFactoryMode;
import java.util.Scanner;
//静态工厂方法
public class StaticFactory{
public static void main(String[] args) {
ThisOperation factory = new ThisOperation();
@SuppressWarnings("resource")
Scanner input = new Scanner(System.in);
System.out.println("请输入第一个数字:");
int firstNumber = input.nextInt();
System.out.println("请输入运算符:");
String symbol = input.next();
System.out.println("请输入第二个数字:");
int secondNumber = input.nextInt();
//拿到输入操运算符对应的对象,这里有个好处就是用到那个操作就实例化那个操纵。
@SuppressWarnings("static-access")
StaticOperation operation = factory.getOperationObject(symbol);
float result = operation.getResult(firstNumber, secondNumber);
System.out.println("您好,通过简单工厂模式计算出来的结果是:" + result);
}
}
//加减乘除
class AddFactory implements StaticOperation{
@Override
public float getResult(float firstNumber, float secondNumber) {
return firstNumber + secondNumber;
}
}
class SubFactory implements StaticOperation{
@Override
public float getResult(float firstNumber, float secondNumber) {
return firstNumber - secondNumber;
}
}
class MulFactory implements StaticOperation{
@Override
public float getResult(float firstNumber, float secondNumber) {
return firstNumber * secondNumber;
}
}
class DivFactory implements StaticOperation{
@Override
public float getResult(float firstNumber, float secondNumber) {
return firstNumber / secondNumber;
}
}
//静态工厂模式创建对象
class ThisOperation{
public static StaticOperation getOperationObject(String symbol){
//理解: 通过多态,批量创建对象。这个创建对象的地方就像一个对象生产工厂,这不就是工厂模式么
//对象生产工厂
StaticOperation operation = null;
switch(symbol) {
case "+" : operation = new AddFactory();
break;
case "-" : operation = new SubFactory();
break;
case "*" : operation = new MulFactory();
break;
case "/" : operation = new DivFactory();
break;
default:
break;
}
return operation;
}
}
网友评论