- 浏览: 25627 次
- 性别:
- 来自: 上海
文章分类
迪米特法则:LoD,最少知识原则。 如果两个类不必彼此直接通信,那么这两个类就不应该发生直接的相互作用。如果其中一个类需要用另一个类的某一个方法的话,可以通过第三者转发这个调用。
策略模式:定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。
public interface Strategy {
public void algorithmInterface();
}
public class ConcreteStrategyA implements Strategy {
public void algorithmInterface() {
}
}
public class ConcreteStrategyB implements Strategy {
public void algorithmInterface() {
}
}
public class ConcreteStrategyC implements Strategy {
public void algorithmInterface() {
}
}
public class Context() {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public void contextInterface() {
strategy.algorithmInterface();
}
}
策略模式的重心不是如何实现算法,而是如何组织、调用这些算法,从而让程序结构更灵活,具有更好的维护性和扩展性。
扩展:将上下文当作参数传递给策略对象。
策略模式:定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。
public interface Strategy {
public void algorithmInterface();
}
public class ConcreteStrategyA implements Strategy {
public void algorithmInterface() {
}
}
public class ConcreteStrategyB implements Strategy {
public void algorithmInterface() {
}
}
public class ConcreteStrategyC implements Strategy {
public void algorithmInterface() {
}
}
public class Context() {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public void contextInterface() {
strategy.algorithmInterface();
}
}
策略模式的重心不是如何实现算法,而是如何组织、调用这些算法,从而让程序结构更灵活,具有更好的维护性和扩展性。
扩展:将上下文当作参数传递给策略对象。
发表评论
-
访问者模式Visitor预留通路,回调实现
2014-03-13 16:55 377表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各 ... -
桥接模式Bridge分离抽象和实现
2014-03-13 16:55 490将抽象部分与它的实现部分分离,使它们都可以独立地变化。 桥接 ... -
职责链模式Chain of Responsibility分离职责,动态组合
2014-03-12 17:25 341使多个对象都有机会处 ... -
装饰模式Decorator动态组合
2014-03-12 17:00 276动态地给一个对象添加 ... -
解释器模式Interpreters分离实现,解释执行
2014-03-12 16:27 294给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解 ... -
享元模式Flyweight分离与共享
2014-03-12 13:20 301运用共享技术有效地支持大量细粒度的对象。 安全实体:就是被系 ... -
备忘录模式Memento保存和回复内部状态
2014-03-11 17:47 432在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外 ... -
状态模式State根据状态来分离和选择行为
2014-03-11 17:20 398允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改 ... -
模板方法模式Templete Method 固定算法骨架
2014-03-11 11:15 537定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法 ... -
组合模式Composite统一叶子对象和组合对象
2014-03-07 18:18 306将对象组合成树型结构以表示“部分-整体”的层次结构。组合模式使 ... -
迭代器模式Iterator 控制访问聚合对象中的元素
2014-03-07 17:57 410提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该 ... -
命令模式Command 封装请求
2014-03-07 16:26 379将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数 ... -
观察者模式Observer订阅模式-触发联动
2014-03-07 11:19 382定义对象间的一种一对 ... -
代理模式Proxy 为别人做嫁衣(控制对象访问)
2014-03-06 00:39 331为其他对象提供一种代理以控罪对这个对象的访问。 代理大致被分为 ... -
中介者模式Mediator 封装交互
2014-03-06 00:19 370用一个中介对象来封装 ... -
原型模式Prototype 克隆生成对象
2014-03-06 00:19 566用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 ... -
生成器模式Builder 分离整体构建算法和部件构造
2014-03-06 00:19 307将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建 ... -
抽象工厂模式 Abstract Factory 选择产品簇的实现
2014-03-06 00:20 417工厂方法模式或简单工 ... -
工厂方法模式Factory Method延迟到子类来选择实现
2014-03-05 18:12 950定义一个用于创建对象 ... -
单例模式Singleton某个类只需要一个类实例
2014-03-05 16:46 426保证一个类只有一个实例,并提供一个访问它的全局访问点。 懒汉 ...
相关推荐
总结来说,策略模式是一种强大的设计模式,它提供了一种将算法族封装在独立的可互换的策略类中的方法,使得客户端可以根据需要选择合适的行为。在Java编程中,策略模式广泛应用于需要动态改变对象行为的场景,如游戏...
1. **目的不同**:桥接模式是为了分离抽象与实现,让它们可以独立变化,而策略模式关注的是算法或行为的选择。 2. **结构差异**:桥接模式包含抽象、实现和桥接角色,实现部分和抽象部分通过桥接角色关联;策略模式...
在实际应用中,策略模式常常用于处理多种可能的算法选择,例如排序算法(冒泡排序、快速排序等)、支付方式(信用卡支付、支付宝支付等)或者游戏中的角色移动策略等。 策略模式的优点: 1. **封装变化**:策略模式...
2. **具体策略类(Concrete Strategy Classes)**:实现了策略接口,提供具体的算法实现。每个具体策略类代表一种策略,它们之间的区别在于实现策略接口的方法。 3. **上下文(Context)**:上下文使用策略接口来...
策略模式通常由三部分组成:上下文(Context)、策略接口(Strategy)和具体策略类(Concrete Strategy)。上下文是使用策略的对象,它定义了与策略交互的接口,而策略接口定义了策略的公共操作。具体策略类实现了...
策略模式(Strategy Pattern)是一种行为设计模式,它允许在运行时选择不同的算法或行为,将算法的使用与算法的实现分离。策略模式的核心是定义一个策略接口或抽象类,然后由一系列具体策略类去实现这个接口或继承这...
这样,策略模式就将算法的选取与算法的实现分离开来,降低了耦合度。 2. **工厂模式**:工厂模式是一种创建型设计模式,提供了一种创建对象的最佳方式。在Java中,工厂模式通过创建一个工厂类来生产特定类型的对象...
在C#与.NET6框架下,策略模式的应用能够帮助我们实现代码的灵活性和可扩展性。下面将详细讲解策略模式的核心概念、实现方式以及如何在实际项目中应用。 **1. 概念理解** 策略模式定义了一系列算法,并将每个算法...
2. 具体策略(Concrete Strategy)类:实现了抽象策略接口,提供了具体的算法实现。 3. 上下文(Context)类:使用抽象策略接口来调用具体策略对象的算法。上下文维护了一个指向某个具体策略对象的引用,但并不直接...
策略模式是一种设计模式,它允许将算法封装在独立的类中,从而可以在运行时动态地选择和更改算法。这种模式的核心在于将算法的行为与环境分离,使得算法可以在不改变环境的情况下进行修改或替换,增强了系统的灵活性...
具体策略(ConcreteStrategy)是实现策略接口或抽象类的类,它提供了具体的算法实现。上下文(Context)是使用策略的类,它可以根据需要选择不同的策略来实现不同的算法。 在策略模式中,算法的变化是独立于使用它...
在实际应用中,策略模式可以用于许多场景,例如在购物车系统中,根据用户的优惠策略(如满减、打折等)选择不同的计算价格的算法;在游戏设计中,不同的AI行为可以看作是不同的策略;在数据分析中,不同的数据处理...
JavaScript中的策略模式通常涉及将算法的定义与其使用者分离,使用者根据不同的上下文环境选择不同的算法策略。 在给定的代码示例中,定义了三种算法策略来计算奖金(award),分别对应不同的级别(level):S级、A...
2. **具体策略类(Concrete Strategy Classes)**:实现了策略接口,提供了具体的算法实现。每个具体策略类代表了一种特定的解决策略。 3. **上下文(Context)**:使用策略接口来调用相应的算法。上下文通常持有对...
通过策略模式,我们可以将算法的决策与使用算法的代码分离,使得系统更加灵活,易于扩展和维护。 设计模式是软件设计中的重要思想,可以帮助我们编写可复用、可维护的代码。策略模式作为行为型模式的一种,强调的是...
策略模式是一种设计模式,它使你能在运行时改变对象的行为,通过将算法封装在独立的策略类中,实现了策略的可替换性。这种模式的核心思想是将策略对象的选取和执行算法的责任分离,使得策略对象可以根据不同的上下文...
2. **具体策略类**:实现了策略接口,提供具体的算法实现。这些类是策略的实现,每个类封装了一种算法。 3. **上下文角色**:上下文使用了策略对象来执行算法。上下文可能知道它的具体策略类,但通常它可以通过策略...
2. **具体策略类**(Concrete Strategy Classes):实现了策略接口,提供了具体的算法实现。例如,`FlyWithWings`和`FlyNoWay`实现了`FlyBehavior`接口,`Quack`和`Squeak`实现了`QuackBehavior`接口。 3. **上下文...
策略模式通常用于当有多种算法可以选择,或者需要在运行时动态选择算法的情况。通过将策略对象注入到客户端,我们可以根据需要灵活地切换策略,而无需修改客户端代码。 在Java中,策略模式常常结合接口实现,但随着...
- **解耦**:策略模式将算法的使用和实现分离,降低了系统的耦合度。 在实际应用中,策略模式常用于处理具有多种实现方式的复杂逻辑,例如排序算法、支付方式、打折策略等。在软件开发过程中,如果一个类需要根据...