TemplateMethod和Strategy模式的区别(实例)

本例取自《敏捷软件开发》地14章,分别使用TemplateMethod和Strategy模式来实现BubbleSort

使用TemplateMethod实现的版本


#include <iostream>
using namespace std;

template<typename T>
int getLenOfArray(T& arg)
{
	return sizeof(arg)/sizeof(arg[0]);
}


class BubbleSorter
{
public:
	virtual ~BubbleSorter()
	{}

protected:
	int doSort()
	{
		if(length<=1)
		{
			return operations;
		}

		for(int nextToLast = length -2; nextToLast >= 0; nextToLast--)
		{
			for(int index = 0; index <= nextToLast; index++)
			{
				if(outOfOrder(index))
				{
					swap(index);
					operations++;
				}
			}
		}

		return operations;
	}

	virtual bool outOfOrder(int)=0;
	virtual void swap(int)=0;

protected:
	int length;

private:
	int operations;
};

class IntBubbleSorter:public BubbleSorter
{
public:
	void sort(int arg[], int size)
	{
		memcpy(array, arg, size);
		length = size;
		doSort();
		show();
	}

private:
	bool outOfOrder(int index)
	{
		return array[index] > array[index + 1];
	}

	void swap(int index)
	{
		int temp = array[index];
		array[index] = array[index + 1];
		array[index + 1] = temp;
	}

	void show()
	{
		for(int index = 0; index < length; index++)
		{
			cout<<array[index]<<endl;
		}
	}

private:
	int array[];
};


void bubbleSorter()
{
	int a[] = {2,1,4,3};

	IntBubbleSorter sorter;
	sorter.sort(a, getLenOfArray(a));
}

实现输出:

1
2
3
4





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值