设计模式-简单工厂模式

    今天我们开始学习设计模式,从最简单的开始。
    不知道从什么时候开始,我们已经不满足与我们写的平庸代码,感觉如此,事实如此。
    设计模式的诞生是为了解决代码的可扩展性和维护性已经稳定性,有的人看了设计模式,只感觉平白添加了很多代码和类,这里我们要注意,类和代码不是无故添加的,各有各的职责,那么说到设计模式,我们就要明白面向对象,已经面对对象的三大原则:集成,封装,多态。

    回头看看我们的程序,有多少代码符合呢,好了。现在开始讲解简单工厂模式。
工厂工厂,那自然是生产东西的地方,在我们这里就是生产代码或者类了,那为什么要生产呢,主要是为了应对不同的情况去做不同的处理,从计算器开始说,让我们写一个计算器,我们一般会写一个计算类和主类就完事了,但是如果我们要添加更多计算业务怎么办,那么我们就要不断在这个计算类中进行改动,这个类就会变成越来越复杂,越来越长,重要的是不好维护,不经意间就会出现意想不到的错误,那么针对这个问题,我们就要将问题拆分,这里我们的工厂就是计算类,那么生产的就是计算的算法,算法有:加法,减法,乘法,除法…,这里的算法我们就可以写成一个个类,并且都集成最基本的算法类:

/**
 * 运算基类
 */

public interface BaseOperation<T, A, B> {

    T operation(A a, B b);

}

    那么一个简单的减法算法类怎么写呢,上代码:

public class AdditionOperation implements BaseOperation<Double, Double, Double>{

    @Override
    public Double operation(Double o, Double o2) {
        return o + o2;
    }
}

    代码简洁易懂,就是单单的一个加法过程,有人问了,这么简单的一个过程,有必要还去弄一个类,这么大费周章的至于么。这就是我们的设计思想,为了便于扩展,我们只写了加减乘除,四个算法,但是要是日后我们还需要添加另一种算法咋办,再在你的那个大类里面写么?要是更多的算法呢?所以说不要只看到当前的小格局。
写好了一个加法的算法类,那么我们怎么用到它呢,这时候我们的算法生产工厂就该登场了,先看看:

public class OperationFactory {

    private ArithmeticSymbol opration;
    private Double result;

    public OperationFactory(ArithmeticSymbol opration){
        this.opration = opration;
    }

    public Double getResult(Double a, Double b){
        switch (opration){
            case Addition:  //加法
                result = new AdditionOperation().operation(a, b);
                break;
            case Subtraction:     //减法
                result = new SubtractionOperation().operation(a, b);
                break;
            case Multiplication:     //乘法
                result = new MultiplicationOperation().operation(a, b);
                break;
            case Divisi:         //除法
                result = new Division().operation(a, b);
                break;
        }
        return result;
    }

    //代表加减乘除的几个枚举值
    public enum ArithmeticSymbol{
        Addition, Subtraction, Multiplication, Divisi
    }

}

    当我们使用不同的枚举值去代码不同的算法的时候,这个工厂就会提供不同的运算结果,这样的话我们和把所有的东西写在一个类里面相比,如果添加一种算法,我们只需要添加新的算法类和在这个工厂里面添加一个switch分支即可,好处是不会影响到其他任何的算法,思路清晰,不容易出错,扩展性很强。
写好了算的部分,下面就是使用了,上代码:


        OperationFactory operationFactory = new OperationFactory(Addition);
        Log.d("OperationResult", operationFactory.getResult(1.0, 2.0) + "");

    首先声明算法的种类,是加法,其次提供数据,直接给出结果,我们仔细观察看会发现什么,虽然我们前面写的很多类,但是到了这里我们只需要使用到一个类,那就是这个算法生产工厂,操作简单,代码游戏,还不快来学习!
源码奉上:https://gitee.com/wanxuedong/SheJiMoShi-JianDanGongChangMoShi/tree/master

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值