序
又回来我们的大话设计模式,初夜只是一个引子,在之后的文章中将对23种设计模式进行说明,本人文笔有限,写不出高深的理论,只能写些大白话,之乎者也这类精英词就算了。回归正题,引出本文头号大屌丝——小菜。我们的屌丝选手小菜开场等级有点低,装备也不行,连一个计算机都没写好,作为强力的打后期,出门买个补刀斧还是要地。因此在我们第二夜就介绍这个补刀斧——简单工厂模式。
简单工厂模式
所谓“没买补刀斧,出门白辛苦”,这个Dota中的神器出门装,作为屌丝的我们是一定要买的,而简单工厂模式就是我们的补刀斧,我们很多时候都会用到这个设计模式,但可能并没有注意这叫做简单工厂模式。
应用场景
在程序设计中我们可能会用到简单工厂模式的应用场景:
就是当我们有一堆堆的并列对象,这些对象目的相似,结构相同,创建的时候只是根据需求创建,并且创建过程也是一样的,这时我们就可以用简单工厂模式了。
工厂模式类图
类图么,网上一大堆,这里就是列在这里给人看看,其实基本上也没人强制去记什么类图,主要还是在应用中能将这个模式使用起来为主。
示例
我们还是主要来看示例,通过代码来学习一种模式才是王道。话说把“大象放冰箱总共要几步”“三步,第一步,把冰箱门打开。第二步,把大象放进去。第三步,把冰箱门关上。”
工厂模式的创建也分三步(好巧啊,我也分三步,哈哈哈。。。)
1、归纳总结并列类,创建并列类抽象。
我们这里使用的栗子是计算器,所以并列类就是各种计算法则,抽象类也就是这个运算的抽象。
/**
* 这里使用的是一个抽象类,而不是接口主要有几个原因,
* 一个是之后创建类时,需要这个父类指向子类的引用
* 还有一个原因就是这里存储了num1和num2两个变量
**/
public abstract class Operation {
public int num1;
public int num2;
public abstract int operator();
}
2、实现并列类,也就是子类
这里实现了两个操作类,如果需要,可以对其进行扩展,由于篇幅原因就不在列出了,之后的招式雷同,就不在演示了。
/**
* 加法操作
**/
public class OperationAdd extends Operation{
@Override
public int operator() {
// TODO Auto-generated method stub
return num1 + num2;
}
}
/**
* 减法操作
**/
public class OperationJian extends Operation{
@Override
public int operator() {
// TODO Auto-generated method stub
return num1 - num2;
}
}
3、创建简单工厂
简单工厂的创建方式很简单,就是通过传入的一个变量参数来判断使用哪个实际的操作子类。
/**
* 简单工厂类
**/
public class OperationFactory {
public static Operation createOperation(char op){
switch(op){
case '+':
return new OperationAdd();
case '-':
return new OperationJian();
default:
break;
}
return null;
}
}
至此,一个简单工厂模式就建立完成了。
“啥,你TMD还没用呢就完事了!”其实之后怎么用跟简单工厂模式的关系并不十分大了,这里把栗子举完
public class Calculate {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int num1, num2, result;
String operator;
num1 = in.nextInt();
operator = in.next();
num2 = in.nextInt();
//在这里使用了简单工厂
Operation o = OperationFactory.createOperation(operator.charAt(0));
o.num1 = num1;
o.num2 = num2;
result = o.operator();
System.out.println(result);
in.close();
}
}
结语
简单工厂模式的内容不多,主要就是理解通过一个公共类,去建立不同的实际操作类。在最后屌丝的第一招武术就学完了。当然要在心中默念一下,
重要的事情说三遍
1、建立抽象类
2、建立实操子类
3、建立static函数,根据传入参数,创建不同子类
下一夜,我们将讨论屌丝小菜进阶的第二招武术——策略模式(我擦,好像不是说三遍!)