设计模式之模板方法模式(封装算法)
2018-01-31 16:33
目录
什么是模板方法
模板方法定义了一个算法的步骤,并允许子类为一个或多个步骤提供实现
在上面的代码中,我们模板方法就是prepareRecipe(),原因:- 它是一个方法
- 它用作一个算法模板,在这个例子中,算法是用来制作咖啡因饮料
- 在这里模板中,算法内的每一个步骤都被一个方法代表了。
这个抽象类包含了模板方法。
primitiveOperation1()、primitiveOperation2()模板方法所用到的操作的抽象版本,模板方法本身和这两个操作的具体实现之间被解耦。
一个模板方法中可能许多具体类,这个具体类实现了抽象类的操作。
在上面图中,CaffeineBeverage就是我们的高层组件,它能够控制冲泡方法的算法,只有在需要子类实现某个方法是才调用,饮料的客户代码只依赖CaffeineBeverage的抽象,而不依赖具体的类。好莱坞原则和依赖倒置原则
在这里我们看到好莱坞原则感觉和依赖倒置原则很像,都是用于解耦。
依赖倒置原则让我们尽量避免使用具体类,而多使用抽象,它更加注重与在设计中避免依赖。
好莱坞原则则是一种用在创建框架或组件上的一种技巧,好让底层组件能够被挂钩计算,而又不会让高层组件依赖底层组件,它是创建一个有弹性的设计,允许底层结构能够互相操作,而又防止太过于依赖。使用模板方法来排序
使鸭子类继承至IComparable接口,之后使用sort方法进行排序
public class Duck:IComparable { private string name; private int weight; public Duck(string name, int weight) { this.name = name; this.weight = weight; } public string toString() { return name + "weighs" + weight; } public int CompareTo(object obj)//需要提供的实现 { Duck otherDuck = (Duck) obj; if (this.weight<otherDuck.weight) { return -1; } else if (this.weight==otherDuck.weight) { return 0; } else { return 1; } } }
排序
static void Main(string[] args) { List<Duck> ducks=new List<Duck>{new Duck("11",11),new Duck("2",2),new Duck("13",13),new Duck("7",7)}; DisPlay(ducks); ducks.Sort(); DisPlay(ducks); Console.ReadKey(); }
在上面的例子中,我们可以看到子类提供的实现排序方法的算法。
如本文对您有帮助请移步右下角,推荐本文,谢谢大家的点赞,因为您的支持是我最大动力https://www.cnblogs.com/Tan-sir/p/8310899.html