`
dengwanchuan
  • 浏览: 48901 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

策略模式

阅读更多

策略模式:策略模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式把行为和环境分开。环境类负责维持和查询行为类,各种算法在具体的策略类中提供。由于算法和环境独立开来,算法的增减,修改都不会影响到环境和客户端。


策略模式的结构

策略模式涉及到三个角色

环境角色:持有一个Stratcgy类(策略类)的引用(此处为Dog类),

抽象策略角色:策略类,通常有一个接口或者抽象类实现(此处为Comparator)

具体策略角色:包装了相关的算法和行为(此处为DogHeightComparator和DogWeightComparator)

 

接口

 

package pattern.strategy;


//定义策略接口

//Dog使用这个接口来调用某Comparator定义的算法

public interface Comparator {

//定义一组算法

public int compare(Object o1, Object o2);

}

实现类一

 

package pattern.strategy;


//实现策略接口

public class DogHeightComparator implements Comparator {


//算法一

public int compare(Object o1, Object o2) {

Dog d1=(Dog)o1;

Dog d2=(Dog)o2;

if(d1.getHeight()>d2.getHeight()){

return 1;

}else if(d2.getHeight()<d2.getHeight()){

return -1;

}else{

return 0;

}

}


}

实现类二

 

package pattern.strategy;


//实现策略接口

public class DogWeightComparator implements Comparator {


//策略二

public int compare(Object o1, Object o2) {

Dog d1=(Dog)o1;

Dog d2=(Dog)o2;

if(d1.getWeight()>d2.getWeight()){

return 1;

}else if(d2.getWeight()<d2.getWeight()){

return -1;

}else{

return 0;

}

}


}


环境类
package pattern.strategy;

public class Dog implements Comparable{

private int weight;
private int height;
//策略的引用,可以相互替换
//private Comparator comparator=new DogWeightComparator();
private Comparator comparator=new DogHeightComparator();

public int getWeight() {
return weight;
}

public void setWeight(int weight) {
this.weight = weight;
}

public int getHeight() {
return height;
}

public void setHeight(int height) {
this.height = height;
}

public int compareTo(Object o) {
return this.comparator.compare(this, o);
}
}


 

1
0
分享到:
评论

相关推荐

    策略模式结合模板方法模式

    策略模式结合模板方法模式的设计思路 策略模式结合模板方法模式是策略模式的一种变形,目的是为了解决策略模式中的一些共性问题。在策略模式中,经常会出现这样一种情况,就是发现这一系列算法的实现上存在公共功能...

    详解SpringBoot结合策略模式实战套路

    SpringBoot结合策略模式实战套路 策略模式是一种常用的设计模式,它可以使我们的代码更加灵活、可维护和可扩展。在SpringBoot项目中,策略模式可以与依赖注入机制相结合,实现更加灵活的业务逻辑处理。在本文中,...

    桥接模式和策略模式的区别,内含可运行代码和两者详细区别

    桥接模式和策略模式是软件设计模式中的两种重要模式,它们在实现上有着相似之处,但各自的应用场景和设计理念有所不同。下面将详细阐述这两种模式的特点、区别以及它们在实际编程中的应用。 首先,桥接模式(Bridge...

    设计模式之策略模式 鸭子问题

    设计模式之策略模式 鸭子问题 策略模式是一种经典的设计模式,通过鸭子问题,可以让学习者更好地了解设计模式的概念和实现。策略模式的主要思想是定义一系列的算法,并将每一个算法封装起来,使它们可以相互替换。...

    策略模式在实际项目中的应用二

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在Java中,策略模式通过定义一系列的算法,并将每一个算法封装起来,使它们可以相互替换,让算法独立于使用它的客户而变化。这种模式通常用于处理多种...

    Spring下使用策略模式

    在Spring框架中,策略模式是一种常见的设计模式,它允许我们定义一组可互换的策略,这些策略可以在运行时根据需求动态选择。这篇文章将深入探讨如何在Spring中运用策略模式,并结合源码分析其工作原理。 策略模式的...

Global site tag (gtag.js) - Google Analytics