简单工厂模式与Strategy模式

参考资料:《大话设计模式》

简单工厂模式:


///
///简单工厂模式实验,2014.05.07---通过工厂类实例化对象
///
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ds
{
class Program
{
static void Main(string[] args)
{
Operation oper = OperationFactory.OperationProduct("/");
oper.OperationNum(100,25);
Console.WriteLine(oper.Result());
}
}

class OperationFactory
{
/// <summary>
/// 实例化一个具体类
/// </summary>
/// <param name="oper"></param>
/// <returns></returns>
public static Operation OperationProduct(string oper)
{
Operation Oper = null;
switch (oper)
{
case "+":
Oper = new Operation_add();
break;
case "-":
Oper = new Operation_sub();
break;
case "*":
Oper = new Operation_mul();
break;
case "/":
Oper = new Operation_div();
break;
}
return Oper;
}
}

abstract class Operation
{
protected int numA;
protected int numB;
/// <summary>
/// 传入操作数
/// </summary>
/// <param name="numA"></param>
/// <param name="numB"></param>
public void OperationNum(int numA, int numB)
{
this.numA = numA;
this.numB = numB;
}
/// <summary>
/// 返回操作数结果
/// </summary>
/// <returns></returns>
public abstract int Result();
}

class Operation_add : Operation
{
public override int Result()
{
return numA + numB;
}
}
class Operation_sub : Operation
{
public override int Result()
{
return numA - numB;
}
}
class Operation_mul : Operation
{
public override int Result()
{
return numA * numB;
}
}
class Operation_div : Operation
{
public override int Result()
{
if (numB > 0)
{
return numA / numB;
}
else
{
Console.WriteLine("除数必须为正数");
return 0;
}
}
}
}

Strategy(策略)模式:


///
///简单工厂模式---工厂类只返回实例化的对象,策略模式在Context类中,把方法(变化点)也封装了。
///
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ds_Strategy
{
class Program
{
static void Main(string[] args)
{
Context con = new Context("/");
Console.WriteLine(con.ContextInterface(88,11));
}
}
class Context
{
Operation operation = null;
public Context(string oper) //根据字符串,实例化策略
{
switch (oper)
{
case "+":
this.operation = new Operation_add();
break;
case "-":
this.operation = new Operation_sub();
break;
case "*":
this.operation = new Operation_mul();
break;
case "/":
this.operation = new Operation_div();
break;
}
}
public int ContextInterface(int NumA, int NumB)
{
return operation.Result(NumA, NumB);//调用具体的算法
}
}
/// <summary>
/// 抽象类
/// </summary>
abstract class Operation
{
/// <summary>
/// 返回操作数结果
/// </summary>
/// <returns></returns>
public abstract int Result(int numA, int numB);
}

class Operation_add : Operation
{
public override int Result(int numA, int numB)
{
return numA + numB;
}
}
class Operation_sub : Operation
{
public override int Result(int numA, int numB)
{
return numA - numB;
}
}
class Operation_mul : Operation
{
public override int Result(int numA, int numB)
{
return numA * numB;
}
}
class Operation_div : Operation
{
public override int Result(int numA, int numB)
{
if (numB > 0)
{
return numA / numB;
}
else
{
Console.WriteLine("除数必须为正数");
return 0;
}
}
}

}//namespace

1.简单工厂模式只是解决对象的创建问题;

2.Strategy:定义了算法家族,分别封装起来,让他们之间可以互相替换,让算法的变化,不会影响到使用者--不懂???。

3.说实话,这两个模式的区别不是很清楚;记录在此只是为了方便今后的学习。

时间: 2024-10-27 07:59:41

简单工厂模式与Strategy模式的相关文章

二、使用简单工厂来改进策略模式

策略模式的使用,把一系列算法进行了封装,只需要通过配置不同的算法,即可以实现算法的自由切换.具体内容参考第一篇:http://www.cnblogs.com/lay2017/p/7570041.html 但是,由于有不同的策略,那么我们就需要在使用的时候进行策略的选择,例如: String strategyName = "strategy1"; Strategy strategy = null; switch(strategyName){ case "strategy1&qu

Java策略模式(Strategy模式)

Strategy是属于设计模式中 对象行为型模式,主要是定义一系列的算法,把这些算法一个个封装成单独的类. Stratrgy应用比较广泛,比如,公司经营业务变化图,可能有两种实现方式,一个是线条曲线,一个是框图(bar),这是两种算法,可以使用Strategy实现. 这里以字符串替代为例,有一个文件,我们需要读取后,希望替代其中相应的变量,然后输出.关于替代其中变量的方法可能有多种方法,这取决于用户的要求,所以我们要准备几套变量字符替代方案. 首先,我们建立一个抽象类RepTempRule 定义

Behavioral模式之Strategy模式

1.意图 定义一系列的算法,把他们一个个封装起来,并使它们可相互替换.本模式使得算法可以独立与使用它的客户而变化. 2.别名 政策(Policy) 3.动机 有许多算法可对一个正文流进行分析.将这些算法硬编进使用它们的类中是不可取的.其原因如下: 需要换行功能的客户程序如果直接包含换行算法代码的话将会变得复杂,这使得客户程序庞大并且难以维护,尤其当其需要支持多种换行算法时问题更加严重. 不同的时候需要不同的算法,我们不想支持我们并不使用的换行算法. 当换行功能是客户程序的一个难以分割的成分时,增

Template Method模式和Strategy模式[继承与委托]

继承 program by difference. 通过继承,可以建立完整的软件结构分层.其中每一层都可以重用该层次以上的Code. 过度使用继承的代价是巨大的.应使用组合或者委托来替代继承. Template Method(使用继承)和Strategy(使用委托)模式解决了相同的问题:分离通用的算法和具体的上下文(DIP). Template Method模式. Strategy模式 Template Method模式允许一个通用算法操纵多个可能的具体实现. 而完全遵循DIP的Strategy

简单工厂模式,工厂方法模式,抽象工厂模式

简单工厂模式.抽象工厂模式.工厂方法模式,这三种工厂模式都属于设计模式中的创建型模式,它们在形式和特点上也多少有些相似,其最终目的都是帮我们将对象的实例化部分取出来,进而优化系统架构,增强系统的扩展性,也就是说更好的体现开放封闭原则. 简单工厂模式: 概念: 简单工厂模式是类的创建模式,又叫做静态工厂方法模式,是由一个工厂类根据传入的参量决定创建出哪一种产品类的实例,涉及到工厂角色.抽象产品角色以及具体产品角色. 结构图: 分析: 一: 简单工厂类是整个模式的关键所在,包含了必要的逻辑判断,根据

策略模式(Strategy

Strategy 无论什么程序,其目的都是解决问题.而为了解决问题,我们又需要编写特定的算法.使用Strategy模式可以整体地替换算法的实现部分.能够整体地替换算法,能让我们轻松地以不同的算法去解决同一个问题,这种模式就是Strategy模式.(整体替换算法) 理清职责 |名字|说明 |Hand表示猜拳游戏中的"手势"的类 |strategy|表示猜拳游戏中的策略的类 |Winningstrategy |表示"如果这局猜拳获胜,那么下一局也出一样的手势"这一策略的

再回首,策略、简单工厂是否依然?

?这篇博客是好久之前就打好的草稿,可是一直就拖到了现在,刚好在保定上课,笔记本也排不上大用场,翻看手机,终于捡起了这些草稿,决定写完. 再说设计模式之前,我们先说说开闭原则. 一.开闭原则(ocp) ?以前读这些官方解释,总是觉得很官方,现在在读,觉得句句经典.和大家共享 ?遵循开闭原则设计出的模块具有两个主要特点: ?(1)对于扩展是开放的(Open for extension).这意味着模块的行为是可以扩展的.当应用的需求改变时,我们可以对模块进行扩展,使其具有满足那些改变的新行为.也就是说

运用简单工厂实现登陆权限的选择

在敲机房收费系统重构版之间我们学习了设计模式,可是除了书上的实例外我们并没有再去深究这些东西,同一时候可敢肯定的是我们在刚学习设计模式的时候也不是非常清楚每一个详细的处理逻辑.就像我们之前学过的非常多东西一样,仅仅是先了解一下有这么个东西存在,以后用的时候再深究当中的原理. 在机房收费系统中用简单工厂或者是策略模式最好的地方事实上是处理固定用户和暂时用户结账下机的时候.不同级别的用户,依照不用的方式进行结算(写到这里不禁想起来没有接触设计模式之前还以为这根数据库的设计有关系). 以下是我在B层关

对设计模式的总结之简单工厂与策略模式

前言 面向对象编程追求的本质-提高扩展性.可维护性.灵活性和复用性.合理利用面向对象6个原则,能够很好的达到要求.如何利用好就是至关重要的了,前人总结了23+个设计模式能够让初学者更容易学到其中的精髓,本文就说说我对本人对简单工厂模式.策略模式的见解. 简单工厂模式与策略模式 简单工厂模式 工作中,常常遇到需要做一个功能(鸭子),这个功能中含有可控个数的子操作功能(鸭子叫,鸭子跑,鸭子飞),而且子功能在不同的情况下处理方式又不相同(成年鸭子/小鸭子叫,成年鸭子/小鸭子跑,成年鸭子/小鸭子飞).我