简单工厂、工厂、抽象工厂总结

简介: 简单工厂、工厂、抽象工厂总结

简单工厂


简单工厂,顾名思义要比其他两个工厂简单一些,工厂的作用可以认为是一个人要一件成品交给工厂去完成,那么这个人只要的是结果,对于内部的细节来说是不关心的,所以我们可以理解为这个人直接跟工厂对接。即:在客户端只跟工厂模块对接。


那工厂接到某人给它的任务就开始工厂自己的工作。那么工厂就会命令下面的部门,我们要完成一项什么样的任务,相关部门进行工作。比如说现在要实现一个计算器的功能,客户只要能得到自己的计算结果就行。那么工厂部门就可以命令自己的“运算”部门去工作。下面这段代码就是工厂下的一个部门的工作。


public  class  Operation
{
    private  double _numberA=0;
    private  double _numberB=0;
}
public double  NumberA
{
    get{return _numberA;}
    set{_numberA=value;}
}
public double numberB
{
    get{return _numberA;}
    set{_numberA=value;}
}
public virtual double GetResult() //虚方法
{
    double result=0;
    `return  result;
}

然后“运算部门”告诉自己下面的工人去制作应该要完成的工作。下面的代码就是工人要做的事情。

class OperationAdd:operation
{
    pubic  override  double GetResult
    {
        double result=0;
        result =NumberA+NumberB;
        return result;
    }
}
class OperationSub:operation
{
    public override double GetResult()
    {
        double result=0;
        result=NumberA-NumberB;
        return result;
    }
}
class OperationMul:Operation
{
    public override double GetResult ()
    {
        double result =0;
        result=NumberA*NumberB;
        return result; 
    }
}
class OperationDiv:Ooperation
{
    public override double GetResult()
    {
        double result =0;
        if(Number=0)
        throw new Exception("除数不能为0");
      result=NumberA/NumberB;
        return  result;
    }
}

每个工人把自己的工作做好之后,把成果给工厂

public class OperationFactory//建造一个工厂类
{
    public static Operation createOperate(string operate)
    {
        operation oper=null;
        switch (operate)
        {
            case"+":oper=new OperationAdd();break;
            case"-":oper=new OperaionSub();break;
            case"*":oper=new OperationMul();break;
            case"/":oper=new OperationDiv();break;
        }
        return oper;
    }
}

工厂把最后的成果给客户,并且客户可以得到自己想要的东西

Operation oper;
oper=OperationFactory.createOperate"+";
oper.NumberA=1;
oper.numberB=2;
double result =oper.GetResult();


工厂模式


工厂模式很好理解,如果想要增加新的功能,往工厂类中加case语句即可,这样增加了新的功能,但是同时又修改了原理来的类,这就违背了开闭原则。 那么如何解决这一问题呢?就需要利用到工厂模式了。这个计算器中的工厂类可以抽象出来一个工厂接口,把下面的各个运算方式改为各个运算工厂,这样如果我们要增加类的话,就不会违背开闭原则。


优点:它们是松耦合的,因为创建对象的代码与使用它的代码是分开的。客户端完全不需要关心要传递哪些参数以及需要实例化哪些类。由于添加新类更加容易,所以降低了维护成本。


工厂方法用于创建一个产品


构建工厂接口

interface IFactory
{
    Operation CreateOperation(); 
}

然后再用工厂下面的各个运算类型(加减乘除)去实现这个接口。


class AddFactory:IFactory
{
    public Operation CreateOperation()
    {
        return new OperationAdd();
    }
}
class SubFactory:IFactory
{
    public Operation CreateOperation()
    {
        return new OperationSub();
    }
}
class MulFactory:IFactory 
{
    return new OperationMul();
}
class DivFactory:IFactory
{
    return new OperationDiv();
}

客户端

IFactory operFactory =new AddFactory ();
Operation oper=operFactory .CreateOperation()
oper.NumberA=1;
oper.NumberB=2;
double result=oper.GetResult();


抽象工厂


抽象工厂方法用于创建相关产品的系列,我觉得跟工厂模式有相似之处,如果有新的接口,在工厂接口中增加新的接口方法。

对抽象工厂还有不明白的部分,欢迎各位成功人士留下你们精彩的评论!


相关文章
|
6月前
|
弹性计算 异构计算
阿里云服务器多少钱一小时?在哪查询1小时价格表?
阿里云服务器按量付费,1小时起计费。如2核2G的ECS经济型e实例仅0.094元/小时。不同配置价格各异,例如GPU计算型gn6v(64核256G)高达211.68元/小时。查询价格可访问阿里云ECS页面定制配置。包年包月更划算,2核2G服务器低至99元/年
327 4
|
11月前
|
测试技术
软件测试区分:条件组合覆盖、语句覆盖、判定覆盖、条件覆盖、路径覆盖
本文解释了软件测试中的不同覆盖标准,包括语句覆盖、判定覆盖、条件覆盖、条件组合覆盖和路径覆盖,并讨论了每种覆盖标准的特点、优点和缺点。
2563 62
|
8月前
|
存储 Prometheus Cloud Native
分布式系统架构6:链路追踪
本文深入探讨了分布式系统中的链路追踪理论,涵盖追踪与跨度的概念、追踪系统的模块划分及数据收集的三种方式。链路追踪旨在解决复杂分布式系统中请求流转路径不清晰的问题,帮助快速定位故障和性能瓶颈。文中介绍了基于日志、服务探针和边车代理的数据收集方法,并简述了OpenTracing、OpenCensus和OpenTelemetry等链路追踪协议的发展历程及其特点。通过理解这些概念,可以更好地掌握开源链路追踪框架的使用。
654 41
|
8月前
|
Kubernetes Linux 虚拟化
入门级容器技术解析:Docker和K8s的区别与关系
本文介绍了容器技术的发展历程及其重要组成部分Docker和Kubernetes。从传统物理机到虚拟机,再到容器化,每一步都旨在更高效地利用服务器资源并简化应用部署。容器技术通过隔离环境、减少依赖冲突和提高可移植性,解决了传统部署方式中的诸多问题。Docker作为容器化平台,专注于创建和管理容器;而Kubernetes则是一个强大的容器编排系统,用于自动化部署、扩展和管理容器化应用。两者相辅相成,共同推动了现代云原生应用的快速发展。
2282 11
|
传感器 存储 监控
使用Python进行物联网设备控制与数据收集
通过这些步骤和示例,可以看到Python在物联网领域的广泛应用和强大功能。Python不仅能够轻松实现硬件控制和数据处理,还能通过丰富的库和工具支持高效的开发、部署和运维。随着物联网技术的不断发展,Python将继续在智能家居、工业自动化、智慧城市等领域发挥重要作用,为开发者提供更多的创新和高效的解决方案。
|
SQL 存储 数据库
MSSQL数据库性能调优实战:索引、查询与并发控制的深度剖析
在数据库管理领域,Microsoft SQL Server(MSSQL)的性能调优是保障业务高效运行的核心任务
|
JavaScript
【vue】vue 在线编辑、实时预览的代码交互组件 vue-code-view
【vue】vue 在线编辑、实时预览的代码交互组件 vue-code-view
1683 0
|
前端开发 小程序 开发工具
uni-app黑马优购项目学习记录(一:上)
uni-app黑马优购项目学习记录(第一节上部分)
uni-app黑马优购项目学习记录(一:上)
|
安全 前端开发 Java
基于SSM+MVC三层架构实现用户权限管理系统
基于SSM+MVC三层架构实现用户权限管理系统
752 0
基于SSM+MVC三层架构实现用户权限管理系统
|
存储 Java 测试技术
Java 21革命性升级:探索分代ZGC的性能奇迹
Java 21革命性升级:探索分代ZGC的性能奇迹
426 0