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 ...
随机推荐
- html5 canvas画不出图像的原因
很久没写博客了,今年过年的时候,家里出了意外,现在心里依然很难受.6月份之前一直忙着写毕业论文,答辩完6月初回公司继续上班,今天刚好周末有空,就写下之前碰到一个问题. 做一个图像查看器(基于Chrom ...
- spring的helloworld
前两天接到了支付宝的电话面试,问了我好多java中的知识,知识姐不看java好多年,这猛一问知道的东西还真是不少啊.趁着现在精力还算是比较旺盛,再把spring重新理一理,为下一次面试做准备. 学习每 ...
- Delphi 完整的Bug决议工具EurekaLog的使用
http://blog.csdn.net/akof1314/article/details/6968587 Delphi 完整的Bug决议工具EurekaLog的使用 标签: delphi工具ftp ...
- java中String、stringbuilder、stringbuffer区别
1.可变与不可变 String类中使用字符数组保存字符串,如下就是,因为有"final"修饰符,所以可以知道string对象是不可变的.每次对String对象进行改变的时候其实都等 ...
- 掷骰子-IOS新手项目练习(抱歉,由于个人原因,图片没显示,要源码的项目私聊)
---恢复内容开始--- 今天我们来讲的就是项目<掷骰子> 首先我们先下载资源包,也就是我们需要的图片[点击图片下载] 在我们下载完图片之后,我们就可以开始创建项目 一.我们项目的做法可以 ...
- redis geo 初探
redis的geo搜索功能是3.2之后新增的,所以实验开始之前先查看redis的版本,确保版本正确. redis的geo多用于地理类应用,所以这次还是用了高德地图API来用作数据源. 首先截取几个点: ...
- 循序渐进Python3(八) -- 0 -- 初识socket
socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. socket起源于Un ...
- java环境基础步骤 maven
1. 下载maven,解压到合适的位置 a. 下载 Maven ,其实就是一个压缩包,解压一下 b. 配置一下环境变量 有两个环境变量可以配置: MAVEN_HOME = D:\maven ...
- Spring+quartz 实现定时任务job集群配置
为什么要有集群定时任务? 因为如果多server都触发相同任务,又同时执行,那在99%的场景都是不适合的.比如银行每晚24:00都要汇总营业额.像下面3台server同时进行汇总,最终计算结果可能是真 ...
- 极光推送NotificationServiceTest.appex文件变红不存在丢失解决办法
这个图片是文件丢失的 创建.appex文件 创建.appex文件 把极光demo里面的这两个文件复制粘贴到新的文件件(新创建的文件是 UIViewController类型的所以就把 (Notifica ...