- 浏览: 610634 次
- 性别:
- 来自: 卡哇伊
文章分类
- 全部博客 (299)
- C# (25)
- Java (1)
- WinForm (0)
- Asp.Net (86)
- Jsp (2)
- Php (1)
- Web Service (0)
- Desgin Patterns (19)
- Data Structure & Algorithms (1)
- SQLserver (41)
- Mysql (0)
- Oracle (2)
- Javascript (50)
- Ajax (10)
- Jquery (1)
- Flex (0)
- Regular Expression (5)
- DIV+CSS+XHTML+XML (18)
- Software Test (0)
- Linux (0)
- Utility (17)
- Net Digest (4)
- windows 2003 (10)
- Other (4)
- English (1)
- IT Term (1)
最新评论
-
w497480098h:
学习了 很好谢谢
SQL Server下无限多级别分类查询解决办法(简单查询树形结构数据库表) -
main_fun:
确实不错
iframe自适应高度 -
jveqi:
...
DBA -
mxcie:
其它版本没有确认,今天使用vs2003时,其.sln文件也需要 ...
彻底删除项目的VSS源代码管理信息 -
moneyprosper:
就只有IE支持,火狐和谷歌都不支持此种方法。正在寻找中。。。
从父页面读取和操作iframe中内容方法
策略模式(Strategy Pattern) 中体现了两个非常基本的面向对象设计原则
1.封装变化概念.
2.编程中使用接口,而不是对接口实现.换句话说就是面向接口编程.
策略模式的定义
1.定义了一组算法,将每个算法都封装起来,并且使它们之间可以互换.
2.StrategyPattern使这些算法在客户端调用它们的时候能够互不影响变化.
比如:完成某件事情的方法有多种,这多种方法都可以完成这件事情,假设我想去
机场,那么去机场有多种方式:打车去,坐公交车去,开车去,骑车去等等.这几种
方式都可以实现我的目的,但是它们具体的实现方式是不一样的,但是它们的目的
是一样的.将这些不一样的东西叫做一组算法,它们可以互相交换达到同样的目的.
策略模式的意义
1.策略模式使开发人员能够开发出由许多可替换的部分组成的软件,并且各个部分之
间是弱连接的关系也就是高内聚,低耦合:(模块内部它们是互相关联的,它们要达到高内聚,
就是说联系的非常紧密,但是模块与模块之间它们是达到低耦合,它们的关联不是那么
强)
2.弱连接的特性使软件具有更强的可扩展性,易于维护;更重要的是,它大大提高了软
件的可重用性.
策略模式的组成
抽象策略角色:策略类,通常由一个接口或者抽象类实现
具体策略角色:包装了相关算法和行为
环境角色:持有一个策略类(抽象策略角色)的引用,最终给客户端调用.也就是说客户端
使用的是环境角色但是环境角色中有个抽象策略角色的一个引用,这样在客户端使用的
时候我就可以去替换,相应的具体策略角色.
策略模式的实现
1.策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立类中,从而
使得他们可以互相替换.
2.策略模式使得算法可以再不影响到客户端的情况下发生变化.使用策略模式可以把行为
和环境分割开来.
3.环境类负责维持和查询行为类,各种算法则在具体策略模式中提供.由于算法和环境独立
开来,算法的修改都不会影响环境和客户端.
策略模式的缺点
1.客户端必须知道所有的策略类,并自行决定使用哪一个策略类.
2.造成很多的策略类.
克服这个缺点---->采用工厂方法
ClassDiagrm:
SequenceDiagrm:
class Client { static void Main(string[] args) { Context context = new Context(); context.Add(10); context.Add(7); context.Add(-3); context.Add(9); context.Strategy = new QuickSortStrateqy(); context.Sort(); context.Display(); context.Strategy = new BubbleSortStrategy(); context.Sort(); context.Display(); Console.ReadKey(); } } /// <summary> /// 环境角色 /// </summary> public class Context { List<int> list = new List<int>(); Strategy strategy; public Strategy Strategy { set { strategy = value; } get { return strategy; } } public void Add(int i) { list.Add(i); } public void Sort() { strategy.Sort(list); } public void Display() { foreach (int i in list) { Console.WriteLine(i); } } } /// <summary> /// 抽象策略角色 /// </summary> public interface Strategy { void Sort(List<int> list); } /// <summary> /// 具体策略角色 /// </summary> public class QuickSortStrateqy : Strategy { public void Sort(List<int> list) { //Sort()方法内部使用快速排序 list.Sort(); } } /// <summary> /// 具体策略角色 /// </summary> public class BubbleSortStrategy : Strategy { /*冒泡排序有个特点当某一轮比较完之后,如果没有一个元素位置发生变化, 表示排序实际上已经结束了.因此在排序的时候我们应该设置一个bool值 看看元素有没发生交换.*/ public void Sort(List<int> list) { for (int i = 0; i < list.Count; i++) { bool flag = false; for (int j = 0; j < list.Count - 1 - i; j++) { if (list[j] > list[j + 1]) { list[j] = list[j] + list[j + 1]; list[j + 1] = list[j] - list[j + 1]; list[j] = list[j] - list[j + 1]; flag = true; } } if (!flag) { break; } } } }
发表评论
-
AbstractFactoryPattern(二)
2009-05-01 21:42 711关于抽象工厂(Abstract F ... -
VisitorPattern
2009-05-01 19:20 846意图表示一个作用于某 ... -
MementoPattern
2009-05-01 16:10 720意图在不破坏封装性的前提下,捕获一个对象内部状态,并在该对象之 ... -
MediatorPattern
2009-05-01 11:16 703意图用一个中介对象封装一系列的对象交互.中介者使各对象不需要显 ... -
Statepattern
2009-04-30 13:45 803意图允许一个对象在其 ... -
Chain of Responsibility Pattern
2009-04-28 23:23 862意图使多个对象都有机会处理请求,从而避免请求的发送者和接收者之 ... -
InterpreterPattern
2009-04-28 14:43 857意图给定一个语言之后,解释器模式可以定义出其文法的一种表示,并 ... -
IteratorPattern
2009-04-26 18:15 813意图提供一种方法顺序 ... -
CommandPattern
2009-04-26 13:35 697意图:将一个请求封装为 ... -
TemplateMethodPattern
2009-04-25 13:24 831TemplateMethodPattern:定义一个操作中算法 ... -
PrototypePattern
2009-04-23 15:46 793意图用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的 ... -
追MM与23种设计模式
2009-04-21 15:13 6861、FACTORY—追MM少不了请 ... -
AbstractFactoryPattern
2009-04-21 13:23 746意图 提供一个创建一系列相关或相互依赖对象的接口,而无需指定 ... -
FactoryMethodPattern
2009-04-19 22:20 867工厂方法(FactoryMethod ... -
ObserverPattern
2009-03-27 17:40 799观察者模式又叫做发布- ... -
SimpleFactoryPattern
2009-03-26 00:57 790工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态决 ... -
Builder Pattern
2009-03-21 18:47 1394建造者(Builder)模式 ... -
Singleton Pattern
2009-03-16 16:50 984单件模式:(Singleton pattern) 1.目的 1 ...
相关推荐
策略模式StrategyPattern,通过实现鸭子的飞行策略以及叫声策略演示策略模式的具体实现!
《商场促销:深入理解策略模式》 在软件设计中,策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在这个例子中,我们关注的是商场促销活动,这是一个经常需要根据具体情况调整策略的场景。...
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件开发中,我们经常遇到需要根据不同的条件或场景来执行不同算法的情况。策略模式提供了一种将算法族封装到各自独立的类中,并在运行时选择具体...
在`strategyPattern-master`这个压缩包中,可能包含了以下内容: - `StrategyInterface.java`: 策略接口定义 - `ConcreteStrategyA.java`, `ConcreteStrategyB.java`, ...: 具体策略类实现 - `Context.java`: 客户端...
利用策略模式在排序对象中封装不同的排序算法(包括冒泡排序、快速排序、合并排序等),用户输入一系列的数据,或从文件中读入所需数据, 输入数据类型的存储可结合泛型编程, 然后允许客户动态地选择上述某一种排序...
在`StrategyPattern.cpp`和`StrategyPattern.h`文件中,我们可以预期看到如下结构: `StrategyPattern.h`可能包含了策略接口的定义,例如: ```cpp // 策略接口 class Strategy { public: virtual ~Strategy() {} ...
在给定的压缩包文件中,包含了九种经典的设计模式示例,它们分别是:单例模式(Singleton)、策略模式(StrategyPattern)、适配器模式(AdapterPattern)、装饰者模式(DecoratorPattern)、抽象工厂模式...
1. [策略模式](worthed/OriginBlog/blob/master/articles/StrategyPattern.md) 2. [模板方法](worthed/OriginBlog/blob/master/articles/TemplateMethodPattern.md) 3. [状态模式](worthed/OriginBlog/blob/master...
`StrategyPattern.java`可能包含了一个策略接口和多个实现了不同策略的类。 10. 代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。`ProxyDemo.java`可能展示了如何创建代理对象以控制原对象的...
1. 策略模式【StrategyPattern】:定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响到使用算法的客户端。在策略模式中,策略通常由接口定义,并由不同的具体策略类实现。客户端...
在提供的压缩包"StrategyPattern-Sample"中,我们可以预期找到以下几个关键部分: 1. **策略接口(Strategy Interface)**:例如命名为`AlgorithmInterface`,它声明了所有策略类必须实现的操作。例如: ```java ...
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件设计中,我们经常遇到需要在...在压缩包文件`strategyPattern`中,可能包含了示例代码或者进一步的解释材料,帮助读者更好地理解和应用策略模式。
public class StrategyPattern { public static void main(String[] args) { Context c = new Context(); Strategy s = new ConcreteStrategyA(); c.setStrategy(s); c.strategyMethod(); // 其他策略类的...
在`StrategyPattern`目录下,可能存在`Context`、`Strategy`接口和若干个实现了`Strategy`接口的策略类,如`ConcreteStrategyA`、`ConcreteStrategyB`。 7. **建造者模式**:将复杂对象的构建与其表示分离,使得...
源码可能在`StrategyPattern`下。 7. **职责链模式**:让多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合。在iOS中,错误处理系统或事件传递机制可以采用此模式。源码可能位于`...
设计模式,如单一实例模式(SingletonPattern)和策略模式(StrategyPattern),是在软件开发中针对特定问题的通用解决方案。 Java I/O(输入/输出)是处理数据存储和检索的机制。Java I/O流可以分为字节流和字符流...
8. 策略模式(StrategyPattern): - 是一种行为设计模式,允许将算法的定义、创建和调用封装起来,使它们可相互替换,提高算法的灵活性和可重用性。 - 策略模式通常涉及到策略接口和具体策略实现类。 9. TreeMap...
`StrategyPattern`目录可能包含了策略接口和具体的策略类。 6. **代理模式(Proxy)**:为其他对象提供一种代理以控制对这个对象的访问。在C++中,代理模式可以使用智能指针和虚函数来实现。`ProxyPattern`目录可能...