Do you like playing cards? If your had ever played, you may noticed that everyone has their own way arranging the cards. And in most cases, people will put the cards in order, maybe from the biggest one to the smallest one. Eh, this is a way of sorting.
We can write down the following code to mimic this action.
- public function sort ( array : Array ) : void
- {
- for ( var i : int = 0 ; i < array . length ; i ++ )
- {
- for ( var j : int = 0 ; j < array . length - i ; j ++ )
- if ( ( int )( array [ j ]) < ( int )( array [ j + 1 ]) )
- swap ( array , j , j + 1 ) ;
- }
- }
Here, I use the bubble sort, not insertion sort. Because I think the bubble sort is easy to understand. Using this sort will make you cards arrange from the biggest to the smallest, and the sequence is from left to right. Eh, maybe you don’t like to this sequence, you’d like to hold the cards from the smallest to the biggest, and also it’s from left to right.
Of course, you can change the code with your sorting logic. But, you’ll find that you just need to change the compare logic. Maybe, we can extract the compare logic to another function. And the code will be as follows.
- for ( var i : int = 0 ; i < array . length ; i ++ )
- {
- for ( var j : int = 0 ; j < array . length - i ; j ++ )
- if ( compare ( array , j , j + 1 ) )
- swap ( array , j , j + 1 ) ;
- }
Now, we can rewrite the compare function to get a different result. Let’s go further, we don’t need to implement the compare method now, we can delay it to the subclass. Then, each subclass can get its own way of sorting by override the compare function.
And the class diagram will be.
Aha, a new pattern! And it’s called template method.
The intent is here.
Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm’s structure.
– By THE GOF BOOK
As you see the skeleton of our sorting algorithm is defined in the template class, and the compare function is use for the subclass to redefine.
This pattern is very useful especially when your high level design is stable, but the detail needs to change frequency.
Enjoy!
本文介绍了一种使用模板方法模式来实现排序算法的方法。通过将排序算法的骨架定义在一个基类中,并将比较逻辑留给子类来重写,使得不同的排序需求可以通过简单的继承和覆盖来实现。这种做法不仅简化了代码,还提高了程序的灵活性。
113

被折叠的 条评论
为什么被折叠?



