什么是工厂模式
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
简单的解释
例我们将肯德基当作一个工厂,当我们去点餐,只需要告诉前台,我要一个汉堡或薯条即可,我们不需要去关心汉堡是如何制作;
我们点餐的过程相当于我们创建一个工厂类,告诉前台我们要一个汉堡相当于把名称告诉工厂,由工厂去生产;
而前台告诉厨房:一个汉堡,相当于由工厂决定我们调用哪个类、哪个对象,最终厨房把汉堡给前台,前台在递到我们手中,则相当于对象实例化完成;
- 优点
创建一个对象,只需要知道名称即可;扩展性高,增加产品,只需要增加对应的工厂类; - 缺点
每增加一个产品,都需要对应的工具类、工厂类;一个工厂只能生产一个产品;当产品过多时,一定程序增加了系统的复杂性;
代码解释
实现一个计算器类,由输入两个数字、运算符,得到结果;
1、首先声明一个抽象类,该抽象类只有一个方法,输入数字,返回计算结果
/**
* 运算抽像类,只有一个获取返回结果的方法
*/
public abstract class OperatorAction {
/**
* 根据计算 获取返回结果
* @param numberFIrst
* @param numberSecond
* @return
*/
public abstract Integer getResult(String numberFIrst,String numberSecond);
}
2、声明对应的子类,继承抽像父类,实现其计算方法
public class AddOperatorAction extends OperatorAction {
private String operator="+";
/**
* 此处仅实现相加运算操作,其它-,*,/ 可实现同时的子类进行操作
* @param numberFIrst
* @param numberSecond
* @return
*/
@Override
public Integer getResult(String numberFIrst, String numberSecond) {
return Integer.valueOf(numberFIrst)+Integer.valueOf(numberSecond);
}
}
3、创建一个简单的工厂,根据运算符去决定实例化对应的类
public class Action {
public static OperatorAction factory(String operator){
OperatorAction oper=null;
switch (operator){
case "+":
oper=new AddOperatorAction();
break;
}
return oper;
}
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
System.out.print("简单工厂模式,简易计算器\n请输入第一个数字:\n");
String numberFirst=sc.nextLine();
System.out.println("请输入运算符(+、-、*、/):");
String operator=sc.nextLine();
System.out.println("请输入第二个数字:");
String numberSecond=sc.nextLine();
OperatorAction oper=factory(operator);
System.out.println("运算结果:"+oper.getResult(numberFirst,numberSecond));
}
}
后记
工厂模式在Java开发中最常见的就是Spring、Hibernate,像Spring的Bean工厂,我们只需要知道bean的name就可以直接调用,而Hibernate的连接我们同样从SessionFactory中直接获取,通过工厂模式降低的藕合,使得在开发中变的更加容易,高效;
代码参照:大话设计模式
名称解释:http://www.runoob.com/design-pattern/factory-pattern.html
网友评论