设计模式
设计模式分为创建型模式、结构型模式和行为型模式。
创建型模式:创建对象。
结构型模式:把复杂结构分解为多个类,分解的是类本身(包括算法和属性)。
行为型模式:把复杂算法分解到多个类,分解的是算法。
行为模式-模板方法模式
模板方法模式就是把算法的实现放到子类中,然后在父类中定义一个模板方法,这个模板方法调用子类的算法实现。
UML 图
示例代码
// 抽象类
abstract class AbstractClass {
// 模板方法
public void templateMethod() {
primitiveOperation1();
primitiveOperation2();
}
// 抽象方法 1
abstract void primitiveOperation1();
// 抽象方法 2
abstract void primitiveOperation2();
}
// 具体类1
class ConcreteClass1 extends AbstractClass {
@Override
void primitiveOperation1() {
System.out.println("具体类1方法1实现");
}
@Override
void primitiveOperation2() {
System.out.println("具体类1方法2实现");
}
}
// 具体类2
class ConcreteClass2 extends AbstractClass {
@Override
void primitiveOperation1() {
System.out.println("具体类2方法1实现");
}
@Override
void primitiveOperation2() {
System.out.println("具体类2方法2实现");
}
}
// 客户端
public class TemplateMethodPattern {
public static void main(String[] args) {
AbstractClass abstractClass = new ConcreteClass1();
abstractClass.templateMethod();
abstractClass = new ConcreteClass2();
abstractClass.templateMethod();
}
}
输出:
具体类1方法1实现
具体类1方法2实现
具体类2方法1实现
具体类2方法2实现
模板方法模式和策略模式的区别
模板方法基于继承机制: 它允许你通过扩展子类中的部分内容来改变部分算法。
策略模式基于组合机制: 你可以通过对相应行为提供不同的策略来改变对象的部分行为。
模板方法在类层次上运作, 因此它是静态的。
策略在对象层次上运作, 因此允许在运行时切换行为。
访问者模式和策略模式的区别
访问者模式: 多(对象)对多(算法)
策略模式: 一(对象)对多(算法)