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

来源:互联网 发布:怎样给朋友发淘宝链接 编辑:程序博客网 时间:2024/04/28 16:15

最近在看大话设计模式,为了加深印象,记录一下学习过程。


第一个模式:简单工厂模式,此模式为大话设计模式中第一个设计模式,虽然此模式不属于23种GOF设计模式之一。


简单工厂模式中包含的角色:


工厂类:工厂类利用多态的特性,可以根据客户端的需求,创建不同的具体实现类,并返回一个父类对象


抽象类(父类):如果一些类都需要有同样的方法,可以为这些类抽出一个抽象类作为父类


具体业务实现类(子类):具体的实现类,继承父类,重写父类方法,处理自己的业务逻辑


以一个简单的计算器来举例,假如计算器有加、减、乘、除四种操作,可以为这四种操作抽象出一个父类Operation

/** * 抽象类 */public abstract class Operation {    public abstract double compute(double numberA,double numberB);}


加法操作类AddOperation

/** * 加法操作类(具体实现类) */public class AddOperation extends Operation{    @Override    public double compute(double numberA,double numberB) {        return numberA+numberB;    }}

减法操作类

/** * 减法操作类(具体实现类) */public class SubtractOperation extends Operation{    public double compute(double numberA, double numberB) {        return numberA-numberB;    }}

乘法操作类

/** * 乘法操作类(具体实现类) */public class MultiplyOperation extends Operation{    public double compute(double numberA, double numberB) {        return numberA*numberB;    }}

除法操作类

/** * 除法操作类(具体实现类) */public class DivideOperation extends Operation {    public double compute(double numberA, double numberB) {        return numberA/numberB;    }}

工厂类:

/** * 工厂类 */public class OperationFactory {    public static Operation createOperation(String type){        Operation operation;//抽象类        if("+".equals(type)){            operation=new AddOperation();//具体的实现类            return operation;        }else if("-".equals(type)){            operation=new SubtractOperation();            return operation;        }else if("*".equals(type)){            operation=new MultiplyOperation();            return operation;        }else if("/".equals(type)){            operation=new DivideOperation();            return operation;        }        return null;    }}

客户端:

public class Test {    public static void main(String[] args) {        //通过工厂去实例化一个加法操作类,并以Operation类返回        Operation operation=OperationFactory.createOperation("+");        System.out.println(operation.compute(100,200));//Operation由加法操作类实例化,即调用加法操作类的compute进行加法计算    }}


具体的UML类图如下(图片来自大话设计模式):



参考:

(1)大话设计模式

(2)http://blog.csdn.net/weiwenlongll/article/details/6918164