简单工厂模式与策略模式区别

转载 2018年04月17日 12:31:11

原文地址:https://www.cnblogs.com/cxchanpin/p/6770453.html

直接上代码:

简单工厂模式:

------------------------------一个抽象类   --------------------------
abstract class AbsClass
{
    //抽象方法:提供一些列的算法操作
    public abstract void acceptCash(string org);
}

------------------------------2个实现类   --------------------------

//继承自抽象类
class A:AbsClass
{
    //详细方法:提供一些列的算法操作
    public override double acceptCash(string org)

{

         Console.WriterLine("A类方法");

  }
}

//继承自抽象类
class B:AbsClass
{
    //详细方法:提供一些列的算法操作
    public override double acceptCash(string org)

{

         Console.WriterLine("B类方法");

  }
}

------------------------------简单工厂类   --------------------------

//现金收取工厂
class CashFactory
{
    //依据条件返回对应的对象
    public static AbsClass createCashAccept(stringtype)
    {
        AbsClass cs = null;
        switch (type)
        {
            case "A":
                cs = new Al();
                break;
            case "B":
                cs = new B();
                break;
            case "...":
                ........ ....
                break;
        }
        return cs;
    }
}

 

client调用:

/利用简单工厂模式依据下拉选择框,生成对应的对象
AbsClass csuper = CashFactory.createCashAccept("A");// 通过传入type 就能够得到详细的实现类。就好比:你去机场,你直接跟你秘书说,我们开车去机场。这个时候你秘书开车载我去,你负责坐车到机场就能够了。

AbsClass csuper= CashFactory.createCashAccept("B"); //或者 秘书去叫出租车 我们打车去

 


------------------------------策略模式:   --------------------------

 前面的类没有不论什么变化,仅仅是把Factory变成了CaseContext策略类

//策略Context
class CashContext
{
    //声明一个现金收费父类对象
    private AbsClass cs;

    //设置策略行为,參数为详细的现金收费子类(正常,打折或返利)
    public CashContext(AbsClass csuper)
    {
        this.cs = csuper;
    }

    //得到现金促销计算结果(利用了多态机制,不同的策略行为导致不同的结果)
    public double GetResult(double money)
    {
        return cs.acceptCash(money);
    }
}

client调用:

AbsClass cc = null;
   switch (cbxType.SelectedItem.ToString())
            {
                case "A":
                    cc = new CashContext(new A()); //相同是去机场,此时:自己开车去
                    break;
                case "B":
                    cc = new CashContext(new B());//或者自己打车去
                    break;
                case "...":
                    ... ....
                    break;
            }

最后概括总结一下:

策略模式和简单工厂模式看起来很相似,都是通过多态来实现不同子类的选取,这样的思想应该是从程序的总体来看得出的。

假设从使用这两种模式的角度来看的话,我们会发如今简单工厂模式中我们仅仅须要传递对应的条件就能得到想要的一个对象(告诉别人我要干嘛、别人去做),然后通过这个对象实现算法的操作。

策略模式,使用时必须首先创建一个想使用的类对象(自己去 做)。然后将该对象最为參数传递进去,通过该对象调用不同的算法。在简单工厂模式中实现了通过条件选取一个类去实例化对象,策略模式则将选取对应对象的工作交给模式的使用者,它本身不去做选取工作。

结合上面的代码和以下的释义不难看出。事实上两个的区别非常微妙,Factory是直接创建详细的对象并用该对象去运行对应的动作,而Context将这个操作给了Context类。没有创建详细的对象,实现的代码的进一步封装,client代码并不须要知道详细的实现过程。

当然用的最多的还是两者的结合使用

------------------------------策略模式和简单工厂模式:   --------------------------

 前面的类没有不论什么变化,仅仅是把Factory变成了CaseContext策略类

//策略Context
class CashContext
{
    //声明一个现金收费父类对象
    private AbsClass cs;

  public CashContext(String typr)
    {
        switch (type)     //跟秘书打个招呼 我要去机场
             {
                case "A":
                    cc = new CashContext(new A()); //相同是去机场,此时:自己开车去
                    break;
                case "B":
                    cc = new CashContext(new B());//或者自己打车去
                    break;
                case "...":
                    ... ....
                    break;
             }

  }

    //得到现金促销计算结果(利用了多态机制,不同的策略行为导致不同的结果)
    public double GetResult(double money)
    {
        return cs.acceptCash(money);
    }
}

client调用:

CashContext context= CashContext("A");

double a=context.GetResult(double money);

总结:简单工厂模式:只须要发出命令,由他人去实现,策略模式:不只要发出命令,还得由自己亲自去做。

策略模式和简单工厂模式的区别

直接上代码: 简单工厂模式: ------------------------------一个抽象类 -------------------------- abstract class AbsC...
  • u014496722
  • u014496722
  • 2014-07-29 19:34:55
  • 518

浅谈设计模式之简单工厂模式与策略模式

设计模式
  • hong_jing
  • hong_jing
  • 2016-09-01 01:28:52
  • 373

单例模式和工厂模式详解

今题那站在这里和大家一起分享最近在一本书上看到的关于设计模式的内容,接下来要讲的设计模式有:单例模式简单工厂模式工厂方法和抽象工厂代理模式命令模式策略模...
  • xiakexiaohu
  • xiakexiaohu
  • 2018-03-01 14:34:05
  • 29

设计模式之策略模式&简单工厂模式

学习设计模式已经有很长一段时间了,其实先前已经敲过一遍了,但是老觉得没有学到什么,认识也不够深刻,现在趁着重构机房,再重新来过,也不晚。...
  • u010540106
  • u010540106
  • 2014-06-02 21:18:32
  • 1918

多态、策略模式和简单工厂模式的理解

最近在看设计模式一本书,发现策略模式和简单工厂模式很像,刚刚开始我还以为是一样的,总感觉没什么区别,后来才看明白,有一点点个人的理解,记录下来,方便下次复习以及理解。 概念理解: 多态:C++的多态...
  • Andy_93
  • Andy_93
  • 2017-01-04 11:42:44
  • 1127

设计模式_改进策略模式_策略模式与简单工厂模式结合(Java)

上一篇我们介绍了《设计模式_策略模式(Java)》,同时讲述了策略模式与状态模式的区别,如果仔细查看代码或者类图,我们会发现策略模式在一定程度上是存在缺陷的,Client(Test类)必须知道所有的策...
  • tb3039450
  • tb3039450
  • 2016-09-22 20:00:53
  • 1201

设计模式-简单工厂设计模式与策略模式之java实现

介绍一下简单工厂模式与策略模式
  • u013871100
  • u013871100
  • 2016-12-16 22:30:31
  • 388

设计模式-简单工厂设计模式与策略模式之java实现二

设计模式-简单工厂设计模式与策略模式之java实现二      接上一篇博客,继续讲“商场促销”方案的实现。上一篇博客,我们采用简单工厂模式造各种“促销方案”的对象,然后,这也造成了一个不足之处...
  • u013871100
  • u013871100
  • 2016-12-17 11:50:44
  • 626

策略模式及与简单工厂模式的结合

策略模式: 1.策略模式动机:完成一项任务有多种不同的方式,每一种方式称为一种策略,我们可以根据环境或者条件的不同选择不同的策略来完成该项任务。 在软件开发中常常遇到这种情况:实现某一功能有多种途...
  • ustcqi
  • ustcqi
  • 2012-12-19 15:03:37
  • 2392

利用策略模式和简单工厂模式,实现商场收银软件。 营业员根据所购买商品的单价和数量,向客户收费

  • 2016年04月25日 21:25
  • 5KB
  • 下载
收藏助手
不良信息举报
您举报文章:简单工厂模式与策略模式区别
举报原因:
原因补充:

(最多只允许输入30个字)