设计模式之一(简单工厂模式)

简单工厂模式

说先说一下我们熟悉的23中设计模式划分:

总体来说设计模式分为三大类:

创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

其实还有两类:并发型模式和线程池模式。

今天只要是针对简单工厂模式给大家讲解一下。直接例子上。

问题:请用C++,java,c#。vb任意一种面向对象语言实现一个计算器控制台程序。要求输入两个数和运算符号。得出结果。

这种问题大家应该都差不多都会。但是今天主要讲解,这个简单工厂模式的开发使用。


package com.hs.huojg;


import java.io.Serializable;


public class OperationEntity implements Serializable{
private Double numberA;//第一个数
private Double numberB;//第二个数
public Double getNumberA() {
return numberA;
}
public void setNumberA(Double numberA) {
this.numberA = numberA;
}
public Double getNumberB() {
return numberB;
}
public void setNumberB(Double numberB) {
this.numberB = numberB;
}
public Double GetResult(){
double result=0d;
return result;
}
}


大家看到上面代码的含义了。不错,就是先定义两个数出来。有人会问,为什么要这样定义呢。最后再给大家讲。先看代码。

package com.hs.huojg;
/**
 * 简单运算工厂类
 * 
 * 只需要输入运算符,工厂就会自动找到自己的对象实例化
 * 通过多态,返回父类的方式来实现计算器的结果。
 * 
 * */
public class operactionFactory {
    public static OperationEntity createOperation(String operation){
        OperationEntity oper=null;
        switch (operation) {
        case "+":
            oper= new operationAdd();
            break;
        case "-":
            oper= new operationSub();    
            break;
        case "*":
            oper= new operationMul();
            break;
        case "/":            
                oper= new operationDiv();            
                
            break;
        default:
            break;
        }
        return oper;
        
    }

}

哈哈哈哈。。。这一段代码如果你看懂了。那么这个简单工厂模式你就算,会简单应用了哦!

下面继续代码走起。

package com.hs.huojg;
/**
 * 加法类
 * 
 * */
public class operationAdd extends OperationEntity{
    @Override
    public Double GetResult(){
        double result=0d;
        result=getNumberA()+getNumberB();
        return result;
    }
}



package com.hs.huojg;


public class operationDiv extends OperationEntity{
@Override
public Double GetResult(){
double result=0d;
if(getNumberB()!=0){
result=getNumberA()/getNumberB();
}else{
result= Double.parseDouble("不能被除");
}
return result;
}
}

package com.hs.huojg;

public class operationMul extends OperationEntity {
@Override
public Double GetResult(){
double result=0d;
result=getNumberA()*getNumberB();
return result;
}
}

package com.hs.huojg;

public class operationSub extends OperationEntity{
@Override
public Double GetResult(){
double result=0d;
result=getNumberA()-getNumberB();
return result;
}
}

 

代码完毕

最后再来个测试:

package com.hs.huojg;

public class FactoryTest {
    public static void main(String args[]){
        OperationEntity oper=new OperationEntity();
        oper=operactionFactory.createOperation("*");
        oper.setNumberA(4d);
        oper.setNumberB(5d);    
        Double redult=oper.GetResult();
        System.out.println(redult);
    }
}

总结:以上代码就是用简单工厂模式开发出来的,计算器。这么简单的代码,有什么难理解的嘛? 相比大家从代码中就会知道。什么是简单工厂模式。不错。简单工厂模式就是实例化对象的。就这么简单。以上代码注重点:第一:对象初始化的条件。第二回调结果。

如果大家感觉以上设计有什么缺陷请加。499749405群进行交流。让我们一起成长。

原文地址:https://www.cnblogs.com/huojg-21442/p/6946878.html