大话设计模式-第二夜

又回来我们的大话设计模式,初夜只是一个引子,在之后的文章中将对23种设计模式进行说明,本人文笔有限,写不出高深的理论,只能写些大白话,之乎者也这类精英词就算了。回归正题,引出本文头号大屌丝——小菜。我们的屌丝选手小菜开场等级有点低,装备也不行,连一个计算机都没写好,作为强力的打后期,出门买个补刀斧还是要地。因此在我们第二夜就介绍这个补刀斧——简单工厂模式。

简单工厂模式

所谓“没买补刀斧,出门白辛苦”,这个Dota中的神器出门装,作为屌丝的我们是一定要买的,而简单工厂模式就是我们的补刀斧,我们很多时候都会用到这个设计模式,但可能并没有注意这叫做简单工厂模式。

应用场景

在程序设计中我们可能会用到简单工厂模式的应用场景:
就是当我们有一堆堆的并列对象,这些对象目的相似,结构相同,创建的时候只是根据需求创建,并且创建过程也是一样的,这时我们就可以用简单工厂模式了。

工厂模式类图

类图么,网上一大堆,这里就是列在这里给人看看,其实基本上也没人强制去记什么类图,主要还是在应用中能将这个模式使用起来为主。

大话设计模式-第二夜_第1张图片

示例

我们还是主要来看示例,通过代码来学习一种模式才是王道。话说把“大象放冰箱总共要几步”“三步,第一步,把冰箱门打开。第二步,把大象放进去。第三步,把冰箱门关上。”
工厂模式的创建也分三步(好巧啊,我也分三步,哈哈哈。。。)
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函数,根据传入参数,创建不同子类
下一夜,我们将讨论屌丝小菜进阶的第二招武术——策略模式(我擦,好像不是说三遍!)

你可能感兴趣的:(大话设计模式,设计模式,工厂模式)