我的世界java怎么变天亮
正文:
以道御术 / 以术识道
package 开闭原则; public class Ocp { public static void main(String[] args) { //使用看看,存在的问题 GraphicEditor graphicEditor = new GraphicEditor(); graphicEditor.drawShape(new Rectangle()); graphicEditor.drawShape(new Circle()); } } //下面写一个用于绘图的类 class GraphicEditor{ //夜光:接收shape对象,然后来绘制不同的图形 public void drawShape(Shape s){ if (s.m_type == 1) drawRectangle(s); else if(s.m_type == 2) drawCircle(s); } public void drawRectangle(Shape r){ System.out.println(" 绘制矩形"); } public void drawCircle(Shape r){ System.out.println(" 绘制圆形"); } } //这里,我们定义了一个Shape类,基类 class Shape{ int m_type; } class Rectangle extends Shape{ Rectangle(){ super.m_type = 1; } } class Circle extends Shape{ Circle(){ super.m_type = 2; } }
package 开闭原则; public class Ocp { public static void main(String[] args) { //使用看看,存在的问题 GraphicEditor graphicEditor = new GraphicEditor(); graphicEditor.drawShape(new Rectangle()); graphicEditor.drawShape(new Circle()); graphicEditor.drawShape(new Triangle()); } } //下面写一个用于绘图的类 class GraphicEditor{ //夜光:接收shape对象,然后来绘制不同的图形 public void drawShape(Shape s){ if (s.m_type == 1) drawRectangle(s); else if(s.m_type == 2) drawCircle(s); else if(s.m_type == 3) drawTriangle(s); } //绘制矩形 public void drawRectangle(Shape r){ System.out.println(" 绘制矩形"); } //绘制圆形 public void drawCircle(Shape r){ System.out.println(" 绘制圆形"); } //绘制圆形 public void drawTriangle(Shape r){ System.out.println(" 绘制三角形"); } } //这里,我们定义了一个Shape类,基类 class Shape{ int m_type; } class Rectangle extends Shape{ Rectangle(){ super.m_type = 1; } } class Circle extends Shape{ Circle(){ super.m_type = 2; } } //新增画三角形 class Triangle extends Shape{ Triangle(){ super.m_type = 3; } }
package 开闭原则.分析; public class Ocp { public static void main(String[] args) { //使用看看,存在的问题 GraphicEditor graphicEditor = new GraphicEditor(); graphicEditor.drawShape(new Rectangle()); graphicEditor.drawShape(new Circle()); graphicEditor.drawShape(new Triangle()); graphicEditor.drawShape(new OtherGraphic()); } } //下面写一个用于绘图的类 class GraphicEditor{ //夜光:接收shape对象,然后来绘制不同的图形 public void drawShape(Shape s){ s.draw(); } } //这里,我们定义了一个Shape类,基类 //定义为抽象方法 abstract class Shape{ int m_type; public abstract void draw(); //抽象方法 } class Rectangle extends Shape { Rectangle(){ super.m_type = 1; } @Override public void draw() { System.out.println("绘制矩形"); } } class Circle extends Shape { Circle(){ super.m_type = 2; } @Override public void draw() { System.out.println("绘制圆形"); } } //新增画三角形 class Triangle extends Shape { Triangle(){ super.m_type = 3; } @Override public void draw() { System.out.println("绘制三角形"); } } //其他图形 class OtherGraphic extends Shape{ OtherGraphic(){ super.m_type = 4; } @Override public void draw() { System.out.println("绘制其他图形"); } }
在方法前边写:/+快捷键名+Tab键。
即可,比如我设置的快捷键方法名是a
package 迪米特法则; import java.util.ArrayList; import java.util.List; //夜光:写一个类来介绍一下迪米特法则 //客户端 public class Demeter { public static void main(String[] args) { //new一个对象 SchoolManager schoolManager = new SchoolManager(); //调用其方法 schoolManager.printAllEmployee(new CollegeManager()); //传入一个对象CollegeManager } } //学校总部员工 class Employee{ private String id; public String getId() { return id; } public void setId(String id) { this.id = id; } } //学院的员工 class CollegeEmployee{ private String id; public String getId() { return id; } public void setId(String id) { this.id = id; } } //我们写一个类 //管理学院员工的管理类 class CollegeManager{ //返回学院的所有员工 /** * @Description: * @Param: [] * @return: java.util.List<迪米特法则.CollegeEmployee> * @Author: Hy * @Date: 2019/11/28 */ public List<CollegeEmployee> getAllEmployee() { List<CollegeEmployee> list = new ArrayList<CollegeEmployee>(); for (int i = 0; i < 10; i++) { //这里我们增加十个员工到list CollegeEmployee emp = new CollegeEmployee(); emp.setId("学院员工id= " + i); list.add(emp); } return list; } } class SchoolManager{ /** * @Description: * @Param: [] * @return: java.util.List<迪米特法则.Employee> * @Author: Hy * @Date: 2019/11/28 */ public List<Employee> getAllEmployee() { List<Employee> list = new ArrayList<Employee>(); for(int i=0;i<5;i++){ //这里我们增加五个员工到list Employee emp = new Employee(); emp.setId("学院总部员工id= " + i); list.add(emp); } return list; } /** * @Description: 该方法完成输出学校总部和学院员工信息 * @Param: [sub] * @return: void * @Author: Hy * @Date: 2019/11/28 */ void printAllEmployee(CollegeManager sub){ List<CollegeEmployee> list1 = sub.getAllEmployee(); System.out.println("----------------------分公司员工-------------------------"); for(CollegeEmployee e : list1){ System.out.println(e.getId()); } List<Employee> list2 = this.getAllEmployee(); System.out.println("-------------------学校总部员工-------------------------"); for(Employee e : list2){ System.out.println(e.getId()); } } }package 迪米特法则.improve; import java.util.ArrayList; import java.util.List; //夜光:写一个类来介绍一下迪米特法则 //客户端 public class Demeter { public static void main(String[] args) { System.out.println("使用迪米特法则之后的改进~~~"); //new一个对象 SchoolManager schoolManager = new SchoolManager(); //调用其方法 //输出了学院总部的员工id 和 学院的员工id schoolManager.printAllEmployee(new CollegeManager()); //传入一个对象CollegeManager } } //学校总部员工 class Employee{ private String id; public String getId() { return id; } public void setId(String id) { this.id = id; } } //学院的员工 class CollegeEmployee{ private String id; public String getId() { return id; } public void setId(String id) { this.id = id; } } //我们写一个类 //管理学院员工的管理类 class CollegeManager{ //返回学院的所有员工 /** * @Description: * @Param: [] * @return: java.util.List<迪米特法则.CollegeEmployee> * @Author: Hy * @Date: 2019/11/28 */ public List<CollegeEmployee> getAllEmployee() { List<CollegeEmployee> list = new ArrayList<CollegeEmployee>(); for (int i = 0; i < 10; i++) { //这里我们增加十个员工到list CollegeEmployee emp = new CollegeEmployee(); emp.setId("学院员工id= " + i); list.add(emp); } return list; } //输出学院员工的信息 public void printEmployee(){ /* List<CollegeEmployee> list1 = sub.getAllEmployee();*/ List<CollegeEmployee> list1 = this.getAllEmployee(); System.out.println("----------------------分公司员工-------------------------"); for(CollegeEmployee e : list1){ System.out.println(e.getId()); } } } //夜光:我们来分析一下 //分析SchoolManager的直接朋友有哪些 Employee(成员变量)、CollegeManager //CollegeEmployee不是直接的朋友,这样违背了迪米特法则 class SchoolManager{ /** * @Description: * @Param: [] * @return: java.util.List<迪米特法则.Employee> * @Author: Hy * @Date: 2019/11/28 */ public List<Employee> getAllEmployee() { List<Employee> list = new ArrayList<Employee>(); for(int i=0;i<5;i++){ //这里我们增加五个员工到list Employee emp = new Employee(); emp.setId("学院总部员工id= " + i); list.add(emp); } return list; } /** * @Description: 该方法完成输出学校总部和学院员工信息 * @Param: [sub] * @return: void * @Author: Hy * @Date: 2019/11/28 */ void printAllEmployee(CollegeManager sub){ /* 分析问题 * 1. 这里的CollegeEmployee 不是 SchoolManager 的直接朋友 * 2. CollegeEmployee 是以局部变量的方式出现在 SchoolManager * 3. 违反了迪米特法则 * */ //解决方案,将输出学院的员工的方法,封装到CollegeManager /* List<CollegeEmployee> list1 = sub.getAllEmployee(); System.out.println("----------------------分公司员工-------------------------"); for(CollegeEmployee e : list1){ System.out.println(e.getId()); }*/ sub.printEmployee(); List<Employee> list2 = this.getAllEmployee(); System.out.println("-------------------学校总部员工-------------------------"); for(Employee e : list2){ System.out.println(e.getId()); } } }
迪米特法则核心就是降低类之间的耦合