设计模式之二 工厂方法模式 Factory Method

一、模式定义

   定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。工厂方法模式是简单工厂模式的衍生,解决了许多简单工厂模式的问题。

   简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。


二、结构图

工厂方法模式结构图:


简单工厂模式结构图:


示例结构图:



三、代码实现(计算器)

<span style="font-size:14px;">/**
 * 抽象运算类
 */
public abstract class Operation {
    private double numberA = 0;
    private double numberB = 0;

    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 abstract double getResult();
}</span>

/*
 * 加法类
 */
public class OperationAdd extends Operation{
    @Override
    public double getResult() {
        return getNumberA() + getNumberB();
    }
}

/*
 * 减法类
 */
class OperationSub extends Operation{
    @Override
    public double getResult() {
        return getNumberA() + getNumberB();
    }
}

/*
 * 乘法类
 */
class OperationMul extends Operation{
    @Override
    public double getResult() {
        return getNumberA() + getNumberB();
    }
}

/*
 * 除法类
 */
class OperationDiv extends Operation{
    @Override
    public double getResult() {
        return getNumberA() + getNumberB();
    }
}

/**
 * 抽象工厂类
 */
public interface IFactory {
    public Operation createOperation();
}

/*
 * 加法工厂
 */
public class AddFactory implements IFactory{
    @Override
    public Operation createOperation() {
        return new OperationAdd();
    }
    
}

/*
 * 减法工厂
 */
class SunFactory implements IFactory{
    @Override
    public Operation createOperation() {
        return new OperationSub();
    }
}

/*
 * 乘法工厂
 */
class MulFactory implements IFactory{
    @Override
    public Operation createOperation() {
        return new OperationMul();
    }
}

/*
 * 除法工厂
 */
class DivFactory implements IFactory{
    @Override
    public Operation createOperation() {
        return new OperationDiv();
    }
}


Main方法
public class FactoryMethodMain {
    public static void main(String[] args) {
        //进行加法运算
        IFactory factory = new AddFactory();
        Operation oper = factory.createOperation();
        oper.setNumberA(10);
        oper.setNumberB(20);
        double result = oper.getResult();
        System.out.println(result);
    }
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值