JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

Java,设计模式,七大原则,迪米特法则,最少知道原则,案例

wys521 2024-11-02 14:54:59 精选教程 25 ℃ 0 评论

迪米特法则(Demeter Principle)<最少知道原则>:

1、一个对象应该对其他对象保持最少的了解

2、类与类关系越密切,耦合度越大;

3、迪米特法则又叫最少知道原则,即一个类对自己依赖的类知道的越少越好,也就是说,对于被依赖的类不管多么复杂,都尽量将逻辑封装在类的内部;对外除了提供的public方法,不对外泄露任何信息

4、迪米特法则还有个更简单的定义:只与直接的朋友通信;

5、直接的朋友,每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系,就说这两个对象之间是朋友关系;耦合的方式很多,依赖、关联、组合、聚合等;其中,出现成员变量,方法参数,方法返回值中的类为直接朋友,而出现局部变量中的类不是直接的朋友;也就是说,陌生类最好不要以局部变量的形式出现在类的内部;

6、迪米特法则的核心是降低类与类之间的耦合。

代码案例:

设计1(不遵守迪米特法则<最少知道原则>):

import java.util.ArrayList;
import java.util.List;

public class Client {

	public static void main(String[] args) {
		CompanyManager companyManager = new CompanyManager();
		companyManager.printAllEmployee(new BranchManager());
		// 问题:printAllEmployee()方法,没有遵守迪米特法则(最少知道原则)
		// 需要改进
	}

}

//公司员工
class CompanyEmployee {

	private String id;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}
}

//分公司员工
class BranchEmployee {

	private String id;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

}

class BranchManager {

	// 返回==>分公司的员工
	public List<BranchEmployee> getAllEmployee() {
		List<BranchEmployee> beanList = new ArrayList<BranchEmployee>();
		for (int i = 0; i < 10; i++) {
			BranchEmployee branchEmployee = new BranchEmployee();
			branchEmployee.setId("分公司,员工ID=" + i + "");
			beanList.add(branchEmployee);
		}
		return beanList;
	}

}

class CompanyManager {

	// 返回==>总公司的员工
	public List<CompanyEmployee> getAllEmployee() {
		List<CompanyEmployee> beanList = new ArrayList<CompanyEmployee>();
		for (int i = 0; i < 5; i++) {
			CompanyEmployee companyEmployee = new CompanyEmployee();
			companyEmployee.setId("总公司,总部员工ID=" + i + "");
			beanList.add(companyEmployee);
		}
		return beanList;
	}

	// 打印所有员工
	public void printAllEmployee(BranchManager branchManager) {
		// BranchEmployee为陌生类
		List<BranchEmployee> branchEmployeeList = branchManager.getAllEmployee();
		System.out.println("--------------------分公司员工--------------------");
		for (BranchEmployee branchEmployee : branchEmployeeList) {
			System.out.println(branchEmployee.getId());
		}
		System.out.println("--------------------总公司员工--------------------");
		List<CompanyEmployee> companyEmployeeList = this.getAllEmployee();
		for (CompanyEmployee companyEmployee : companyEmployeeList) {
			System.out.println(companyEmployee.getId());
		}
	}

}

设计2(遵守了迪米特法则<最少知道原则>):

import java.util.ArrayList;
import java.util.List;

public class Client {

	public static void main(String[] args) {
		CompanyManager companyManager = new CompanyManager();
		companyManager.printAllEmployee(new BranchManager());
		// 遵守迪米特法则(最少知道原则)改进
	}

}

//公司员工
class CompanyEmployee {

	private String id;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}
}

//分公司员工
class BranchEmployee {

	private String id;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

}

class BranchManager {

	// 返回==>分公司的员工
	public List<BranchEmployee> getAllEmployee() {
		List<BranchEmployee> beanList = new ArrayList<BranchEmployee>();
		for (int i = 0; i < 10; i++) {
			BranchEmployee branchEmployee = new BranchEmployee();
			branchEmployee.setId("分公司,员工ID=" + i + "");
			beanList.add(branchEmployee);
		}
		return beanList;
	}
	
	// 打印分公司的员工
	public void printAllEmployee() {
		List<BranchEmployee> branchEmployeeList = this.getAllEmployee();
		System.out.println("--------------------分公司员工--------------------");
		for (BranchEmployee branchEmployee : branchEmployeeList) {
			System.out.println(branchEmployee.getId());
		}
	}

}

class CompanyManager {

	// 返回==>总公司的员工
	public List<CompanyEmployee> getAllEmployee() {
		List<CompanyEmployee> beanList = new ArrayList<CompanyEmployee>();
		for (int i = 0; i < 5; i++) {
			CompanyEmployee companyEmployee = new CompanyEmployee();
			companyEmployee.setId("总公司,总部员工ID=" + i + "");
			beanList.add(companyEmployee);
		}
		return beanList;
	}

	// 打印所有员工
	public void printAllEmployee(BranchManager branchManager) {
		branchManager.printAllEmployee();
		System.out.println("--------------------总公司员工--------------------");
		List<CompanyEmployee> companyEmployeeList = this.getAllEmployee();
		for (CompanyEmployee companyEmployee : companyEmployeeList) {
			System.out.println(companyEmployee.getId());
		}
	}

}

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表