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

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

简单工厂


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


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


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();


抽象工厂


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

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


相关文章
|
5月前
|
设计模式 Java
Java设计模式:工厂模式之简单工厂、工厂方法、抽象工厂(三)
Java设计模式:工厂模式之简单工厂、工厂方法、抽象工厂(三)
抽象工厂和工厂方法对比
抽象工厂和工厂方法对比
57 0
|
设计模式 算法 前端开发
【大话设计模式】-简单工厂-工厂方法-自动化实现工厂工厂方法!
【大话设计模式】-简单工厂-工厂方法-自动化实现工厂工厂方法!
106 0
工厂方法模式是怎么变抽象工厂的
工厂方法模式是怎么变抽象工厂的
31 0
|
设计模式
抽象工厂
抽象工厂
52 0
|
C++
工厂方法VS简单工厂
工厂方法VS简单工厂
50 0
|
设计模式
大话设计模式-三种工厂模式(简单工厂、工厂方法、抽象工厂)
大话设计模式-三种工厂模式(简单工厂、工厂方法、抽象工厂)
|
C# uml
C#简单工厂总结
C#简单工厂总结
45 0
|
设计模式 缓存 Java
简单工厂不简单
简单工厂不简单
简单工厂不简单
|
设计模式 C++
简单工厂VS工厂方法VS抽象工厂
简单工厂VS工厂方法VS抽象工厂
107 0
简单工厂VS工厂方法VS抽象工厂