设计模式1---普通工厂模式

工厂模式的精髓在于:

当需要不同的条件产生具有多态性质的一组类时,可以考虑使用factory类,来生成。

所以工厂模式的特征:

1.需要有一个抽象的基类。

2.需要用到一组子类,这些类需要相同的基类。

3.需要通过一个factory类的static方法产生这一组基类。

 

下面是一个计算器的例子:

UML图如下:

设计模式---image1

如上图:

1.计算器的操作是一组独立的数据操作。这些操作可以抽象为一个基类。

2.通过工厂类可以产生这些操作类,并且可以赋值给抽象基类。

工厂类:

package com.jayfulmath.designpattern.samplefactory.operator;

public class OperatorFactory {

    public static AbstractOperator CreateOperator(String operatorstr)
    {
        AbstractOperator oper = null;
        switch(operatorstr)
        {
        case "+":
            oper = new OperatorAdd();
            break;
        case "-":
            oper = new OperatorDelete();
            break;
        case "*":
            oper = new OperatorPlus();
            break;
        case "/":
            oper = new OperatorDevide();
            break;
        case "squar":
            oper = new OperatorSquare();
            break;    
        }
        
        return oper;
    }
}
package com.jayfulmath.designpattern.samplefactory.operator;

public abstract class AbstractOperator {
    public double NumberA = 0;
    public double NumberB = 0;
    public abstract double GetResult();
}

add方法类:

package com.jayfulmath.designpattern.samplefactory.operator;

public class OperatorAdd extends AbstractOperator {

    @Override
    public double GetResult() {
        // TODO Auto-generated method stub
        return (NumberA+NumberB);
    }

}

 

main方法调用:

    @Override
    public void startDemo() {
        //add
        AbstractOperator addop = OperatorFactory.CreateOperator("+");
        addop.NumberA = 1;
        addop.NumberB = 2;
        System.out.println(addop.NumberA+" add "+addop.NumberB+" = "+addop.GetResult());
        
        //squar
        AbstractOperator squarop = OperatorFactory.CreateOperator("squar");
        squarop.NumberA = 1.2;
        System.out.println(addop.NumberA+" squar " +" = "+squarop.GetResult());
    }

如上:通过工厂类方法:OperatorFactory.CreateOperator("+") 可以很快得到操作类和结果。

优点:工厂类方法便于扩展方法,对原有代码改动很小。

缺点:每次添加一个操作,工厂类就需要修改,这个对扩展开放,对修改也开放,违反了开放--关闭原则。

所以使用工厂方法替代,可以符合该原则。

 

posted on 2014-11-26 14:21  Joyfulmath  阅读(305)  评论(0编辑  收藏  举报

导航