简单工厂模式

简单工厂模式:
简单工厂模式主要通过定义一个工厂类来实例化其他的,而这些其他类通常继承自同一个父类。

简单工厂模式组成:
简单工厂模式主要有三部分组成:

1、工厂类:这是工厂模式的核心,用于创建其他类的实例。

2、抽闲类或接口:简单工厂所实例化的所有类的父类。

3、具体类:抽象类或接口的子类用于实现具体的逻辑操作。

用一个简单的计算器作为例程代码:

抽象类 Operation

/* 抽象类 Operation */
public abstract class Operation {

    private double NumberA = 0;
    private double NumberB = 0;
    public double GetNumberA() {
        return NumberA;
    }
    public double GetNumberB(){
        return NumberB;
    }
    public void SetNumberA(double NumberA){
        this.NumberA = NumberA;
    }
    public void SerNumberB(double NumberB){
        this.NumberB = NumberB;
    }
    /* 抽象方法 */
    abstract double GetResult();
}

具体实现类 OperationAdd:

public class OperationAdd extends Operation {
    public double GetResult()
    {
        return GetNumberA()+GetNumberB();
    }
}
public class OperationDel extends Operation {
    public double GetResult(){
        return this.GetNumberA() - this.GetNumberB();
    }
}

工厂类 Factory:

public class Factry {

    public static Operation createOperation(String operation){
        Operation oper = null;
        switch (operation) {
        case "+":
            oper = new OperationAdd();
            break;

        case "-":
            oper = new OperationDel();
            break;

        default:
            break;
        }
        return oper;
    }
}

客户端使用 Cucl:

public class Cucl {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Operation operation = Factry.createOperation("+");
        operation.SetNumberA(5);
        operation.SerNumberB(4);
        double Result = operation.GetResult();
}

uml类图:
这里写图片描述

使用简单工厂类,首先将计算方法和显示分离,然后将计算实例在一个工厂中实现。在增加新的运算时,不需要了解或修改以有的运算类,直接增加新的继承自抽象类的运算方法,然后在工厂类的switch中增加一个分支。

分析:
简单工厂模式最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。缺点在于增加新的算法,需要增加新的算法类的同时,还要向运算工厂类的方法里加”Case”的条件分支,违背了“对扩展开放,对修改封闭的原则”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值