欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java 设计模式 1 —— 策略模式

程序员文章站 2022-06-13 13:50:56
...

策略模式

定义

策略者模式定义了一系列的算法,并将每一个算法封装起来,而且使他们可以相互替换,让算法独立于使用它的客户而独立变化。

这个模式将类中可变的部分抽象出来封装成一类算法。应用场景之间的切换无需修改代码,只要加载不同的算法就能实现不同场景下的不同功能。

策略者模式的出现是为了弥补继承过程中代码复用性的不足。它完美的体现除了“多用组合,少用继承”的设计原则。

UML类图

我们以大学生为例子来演示策略者模式的特点。在下文中,定义了一个Student类和Major接口。对于所有学术来说,身高和体重都是所有人共有的特征。但是每个人的专业可能有所不同,所以抽象出来设计成接口。
Java 设计模式 1 —— 策略模式

代码结构

Student.java

public class Student {
	public double height;
	public double weight;
	Major major;

	public Student(double height, double weight, Major major) {
		this.height = height;
		this.weight = weight;
		this.major = major;
	}

	public Student(Major major) {
		this(0, 0, major);
	}

	//省略getter和setter

	public void introduce() {
		System.out.println("height=" + height + ", " + "weight=" + weight + ", "+major.majorIn());
	}
}

Major.java

public interface Major {
	String majorIn();
}

Math.java

public class Math implements Major {
	public String majorIn() {
		return "I major in Math.";
	}
}

Computer.java

public class Computer implements Major {
	public String majorIn() {
		return "I major in Computer.";
	}
}

English.java

public class English implements Major {
	public String majorIn() {
		return "I major in English.";
	}
}

运行演示

演示代码

public class Main {
  public static void main(String[] args) {
    Student student1 = new Student(170,60, new Math());
    Student student2 = new Student(177, 65, new English());
    Student student3 = new Student(160, 50, new English());

    student1.introduce();
    student2.introduce();
    student3.introduce();
  }
}

输出结果

height=170.0, weight=60.0, I major in Math.
height=177.0, weight=65.0, I major in English.
height=160.0, weight=50.0, I major in English.
相关标签: Java 设计模式