The Strategy pattern

public class Strategy {
public static void main(String[] args) {
int [] array=new int[]{26,25,15,42,36,16,12};
IInfo test1=new BubbleSort(); //接口引用指向实现了此接口的类创建的实例,创建具体的策略对象
IInfo test2=new SelectSort();
IInfo test3=new InsertSort();
context cont1=new context(test3);
cont1.sort(array);
cont1.tell(array);
}
}
class context{
private IInfo iinfo=null; // 定义接口的引用变量,可以接收不同的实现类
public context(IInfo iinfo){//参数尽量用抽象的东西,好处:接收外面传入的具体实现类的对象
this.iinfo=iinfo;//动态绑定
}
public void sort(int[] array){
//交给具体接收到的策略类对象来帮忙排序
iinfo.sort(array);
}
public void tell(int [] array){
for(int i=0;i<array.length;i++){
System.out.print(array[i]+" ");
}
}
}
interface IInfo{ //抽象的策略,算法责任
public abstract void sort(int [] array);
}
class BubbleSort implements IInfo{//具体的策略,算法具体实现
public void sort(int [] array) {
System.out.println("冒泡排序法:");
for(int i=0;i<array.length-1;i++){
for(int j=0;j<array.length-1-i;j++){//每一轮比较的次数为(N-1)-i次
//相邻的两个数比较,小靠前
if(array[j]>array[j+1]){
int temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
}
}
}
class SelectSort implements IInfo{//具体的策略,算法具体实现
public void sort(int [] array){
System.out.println("选择排序法:");
int min=0;
for(int i=0;i<array.length-1;i++){
min=i;
for(int j=i+1;j<array.length;j++){
if(array[min]>array[j]){
min=j;
}
}
if(min!=i){
int temp=array[i];
array[i]=array[min];
array[min]=temp;
}
}
}
}
class InsertSort implements IInfo{//具体的策略,算法具体实现
public void sort(int [] array){
System.out.println("插入排序法:");
for(int i=1;i<array.length;i++){
int temp =array[i];
int j=i;//把下标保存起来
while(j>0&&temp<array[j-1]){
array[j]=array[j-1];
j--;
}
array[j]=temp;
}
}
}
The Strategy pattern的更多相关文章
- 设计模式(一):“穿越火线”中的“策略模式”(Strategy Pattern)
在前段时间呢陆陆续续的更新了一系列关于重构的文章.在重构我们既有的代码时,往往会用到设计模式.在之前重构系列的博客中,我们在重构时用到了“工厂模式”.“策略模式”.“状态模式”等.当然在重构时,有的地 ...
- 深入浅出设计模式——策略模式(Strategy Pattern)
模式动机 完成一项任务,往往可以有多种不同的方式,每一种方式称为一个策略,我们可以根据环境或者条件的不同选择不同的策略来完成该项任务.在软件开发中也常常遇到类似的情况,实现某一个功能有多个途径,此时可 ...
- [转]设计模式(22)-Strategy Pattern
一. 策略(Strategy)模式 策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化. 假 设现 ...
- 设计模式 - 策略模式(Strategy Pattern) 具体解释
策略模式(Strategy Pattern) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26577879 本文版权全 ...
- 第 1 章 策略模式【Strategy Pattern】
第 1 章 策略模式[Strategy Pattern] 以下内容出自: 24种设计模式介绍与6大设计原则.pdf 刘备要到江东娶老婆了,走之前诸葛亮给赵云(伴郎)三个锦囊妙计,说是按天机拆开解决棘手 ...
- HeadFirst设计模式读书笔记(1)-策略模式(Strategy Pattern)
策略模式(Strategy Pattern): 定义了了算法簇,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户端. 第一个设计原则:找出应用中可能需要变化之处,把他们独立 ...
- 乐在其中设计模式(C#) - 策略模式(Strategy Pattern)
原文:乐在其中设计模式(C#) - 策略模式(Strategy Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 策略模式(Strategy Pattern) 作者:webabc ...
- 第21章 策略模式(Strategy Pattern)
原文 第21章 策略模式(Strategy Pattern) 策略模式 导读:策略模式看完之后,大多数人都会感觉有点混了,包括我,感觉策略模式是一种OO思想的体现(纯属个人拙见). 概述: ...
- 反馈法学习设计模式(一)——策略模式Strategy Pattern
简介(Introduction) 之前学习Java8实战时,遇到一个很好的策略模式示例.便想着借着这个示例结合反馈式的方法来,学习策略设计模式,也以便后面反复琢磨学习. 首先我们通过练习,逐步写出符合 ...
- 设计模式之策略模式(Strategy Pattern)
模板方法是通过继承实现的,在父类中定义出算法的骨架,将不同点在子类中实现.而策略模式是通过接口实现的,策略中定义了完整的算法.它们有点像啊-- 策略模式的定义 策略模式(Strategy Patter ...
随机推荐
- nagios二次开发(六)---nagiosql原理及主要文件的介绍
nagiosql的入口文件:index.php,这也是所有php程序的入口文件.是由apache指定的. index.php 文件的开始引入了 require("functions/prep ...
- SQL查询所有表,所有列
1.查询实例中所有数据库 select name,database_id from sys.databases 2.查询数据库中所有表select TABLE_TYPE,TABLE_NAME from ...
- Win32 OpenGL标准例子
在VS2008的MSDN中有一个标准的OpenGL例子,记录如下: /* * Example of a Win32 OpenGL program. * The OpenGL code is the s ...
- Python—变量
1.在Python中,变量名类似__xxx__的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的,不是private变量 2.访问限制: class内部属性可以被外部 ...
- linux命令(5):rm 命令
linux中删除文件和目录的命令: rm命令.rm是常用的命令,该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除.对于链接文件,只是删除了链接,原有 ...
- 【POJ2828】Buy Tickets(线段树)
题意:有一个输入序列,每次操作要把b[i]插入到第a[i]个,在第a[i]个后面的要后移,问最后序列. n<=200000 思路:顺序来只能用splay维护 考虑倒序,对于插入到第K个位置,在线 ...
- python 连接redis工具类
#!/usr/bin/python # coding=utf-8 __author__ = 'shuangjiang' import redis import sys default_encoding ...
- new(C# 参考)
在 C# 中,new 关键字可用作运算符.修饰符或约束. new 运算符 用于创建对象和调用构造函数. new 修饰符 用于隐藏基类中被继承的成员. new 约束 用于在泛型声明中约束可能用作类型参数 ...
- Xcode Custom Shortcut
edit file "/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources" add < ...
- 有效提高win7电脑网速50倍
有效提高win7电脑网速50倍 目前有多少人在使用Windows7?据统计微软已成功售出3.5亿份正版操作系统,加上市场上流传以Win7旗舰版为首的盗版Win7系统下载,Win7激活次数可能已经超过1 ...