[用设计模式锻炼C#系列]之Strategy

原创 2003年05月09日 12:10:00

名称:Strategy
中文名:策略
类型:行为型
简介:一般用于多策略解决方式的实现.
      本人以为,它的设计思路和Bridge
      很象像.然Stratege的焦点是多策略的实现,
      而Bridge目的于系统的低耦合性,
      当然strategy的特性它亦可实现.
      因为它们都是基本依赖于OOP中的多态特性.
      它在很多体现多策略的情况下是继承最好的
      替代者.    

// created on 2003-3-14 at 7:27

using System;
//member: strategy  concretestrategy context
interface strategy{
 string multi_purpose(string _str);
}

class concretestrategy1:strategy{
 public string multi_purpose(string _str)
 {
  return (_str+" concretestrategy1");
 }
}

class concretestrategy2:strategy{
 public string multi_purpose(string _str)
 {
  return (_str+"concretestrategy2");
 }
}

class context{
 private strategy _strategy;
 
 public context(strategy m_STR){
       _strategy = m_STR;
 }
 
 public string Test(string  m_STRcontext)
    {
        return _strategy.multi_purpose(m_STRcontext);
    }


}


class designpattern_test{
 public static void Main(){
  int m_Inum;
  context m_CON = null;
  Console.WriteLine("Which method you will choose :/n"+
                                  "1.quick but not pricition./n"+
                                  "2.pricition but not quick./n"+ 
                                  "1 or 2?/n");
  for(;;){
  string m_STR = Console.ReadLine();
  if(m_STR == "1" || m_STR == "2")
  {
     m_Inum = Int32.Parse(m_STR);
   break;
  }
  else
  {
     Console.WriteLine("Which method you will choose :/n"+
                                     "1.quick but not pricition./n"+
                                     "2.pricition but not quick./n"+ 
                                     "1 or 2?/n");
  }
  }
  
  if(m_Inum == 1)
   m_CON =new context(new concretestrategy1());
  else
      m_CON =new context(new concretestrategy2());
  
  if(m_CON != null)
  {
   Console.WriteLine(m_CON.Test("I am"));
  }
  else
  {
      Console.WriteLine("May be there is a memory exception./n");
  }
  
  
 }
}


点评:
    1.首先还是C#的接口的原生支持interface.
      我们需要知道继承类对它的签名方法的实现
      必须是public.关于本人对它的看法详见bridge篇.
    2.顺便提及:C#不在支持初始化列表和默认参数的行为.
    3.其它关于很多实现机制原理同于Bridge.
扩展:
    1.在设计中,可针对strategy和context信息交互的实际情况酌情进行
      耦合度的调整.
    2.在context中构置默认的concretestrategy,在用户没有特殊要求的
      情况下,提高概率意义上的性能提高.
    3.在具体的实现上,可以用模板来实现:
      template<typename concretestrategy>
      class context{
            private concretestrategy _strategy;
            public string operation(string m_STRcontext){
                   return _strategy.multi_method(m_STRcontext);
            }
      }                   

 

---------------------------------------------------------------------
                  声明:本程式重在演示C#基本用法
                        不考虑在实际环境中应用带来
                        其它问题的情况.
                 如:多线程.
                  系列文章声明请见第一篇:
               [用设计模式锻炼C#系列]之Singleton、Bridge    
---------------------------------------------------------------------

设计模式之策略(Strategy)模式

Strategy模式是一种行为型设计模式,它将算法一个个封装起来,在某一时刻能够互换地使用其中的一个算法。从概念上看,所有这些算法完成的都是相同的工作,只是实现不同而已。动机在开发中,我们常常会遇到概...
  • lihao21
  • lihao21
  • 2015年08月26日 19:51
  • 2024

浅谈JAVA设计模式之——策略模式(Strategy)

一、概述 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。 二、适用性 1.许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为...
  • l1028386804
  • l1028386804
  • 2015年05月09日 14:02
  • 1833

设计模式学习笔记--Strategy、State

最近在看设计模式的,防止遗忘,总结一下,如有不足还望指正! 策略模式:(strategy)定义算法家族,分别封装起来,让他们之间可以相互替换。此模式可以让算法的变化,不影响使用算法的用户。 类图如下:...
  • smartboy_01
  • smartboy_01
  • 2014年12月30日 22:32
  • 529

C++设计模式<四>:策略模式(Strategy)

1.动机在软件构件过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且有时候支持不使用的算法也是一个性能负担。2.模式定义定义一系列算法,把它们...
  • MonroeD
  • MonroeD
  • 2016年04月08日 01:16
  • 335

Java设计模式——策略模式(Strategy Pattern)

Java设计模式——策略模式(Strategy Pattern) 场景一 描述:刘备要到江东娶老婆了,走之前诸葛亮给赵云(伴郎)三个锦囊妙计,说是按天机拆开解决棘手问题,嘿,还别说,真是解决了大问题,...
  • u012401711
  • u012401711
  • 2016年09月07日 21:16
  • 993

C#设计模式系列:策略模式(Strategy)

1、策略模式简介 1.1>、定义   策略是为达到某一目的而采取的手段或方法,策略模式的本质是目标与手段的分离,手段不同而最终达成的目标一致。客户只关心目标而不在意具体的实现方法,实现方法...
  • CsethCRM
  • CsethCRM
  • 2015年06月11日 15:58
  • 1707

设计模式 - 策略模式(Strategy Pattern) 详解

策略模式(Strategy Pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26577879 本文版...
  • u012515223
  • u012515223
  • 2014年05月22日 13:31
  • 2859

GOF23种设计模式精解

创建型 1. Factory Method(工厂方法) 2. Abstract Factory(抽象工厂) 3. Builder(建造者) 4. Prototype(原型) 5. Singleton(...
  • zhangcanyan
  • zhangcanyan
  • 2016年06月28日 21:14
  • 7110

我所理解的设计模式(C++实现)——策略模式(Strategy Pattern)

每个人都要“交个人所得税”,但是“在美国交个人所得税”和“在中国交个人所得税”就有不同的算税方法。 而策略模式就是对算法进行包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通...
  • LCL_data
  • LCL_data
  • 2013年08月24日 10:59
  • 12666

什么是设计模式?(Design pattern)--和生活结合更好理解

什么是设计模式 一套被反复使用、多数人知晓的、经过分类编目的、代码 设计经验 的总结;使用设计模式是为了 可重用 代码、让代码 更容易 被他人理解、保证代码 可靠性;设计模式使代码编制  真正工程...
  • guo13313
  • guo13313
  • 2017年04月09日 07:50
  • 917
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[用设计模式锻炼C#系列]之Strategy
举报原因:
原因补充:

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