21xrx.com
2024-12-23 00:42:15 Monday
登录
文章检索 我的文章 写文章
Java 设计模式课后答案详解 - Java 设计模式的十大原则及应用
2023-06-15 09:21:12 深夜i     --     --
Java 设计模式

Java 设计模式课后答案详解 - Java 设计模式的十大原则及应用

Java 是一种设计优秀、面向对象和易于维护的编程语言。设计模式是 Java 编程的重要组成部分,编写高质量的 Java 代码,需要掌握 Java 的设计模式。在本文中,我们将介绍 Java 的十大设计模式原则,并提供相关实例代码,帮助您更好地理解使用这些原则。

第一原则:单一职责原则

这个原则指出,每个类只应解决一个特定的问题或任务。如果一个类处理太多的工作,就会变得臃肿不堪、难以修改和维护。下面是一个使用单一职责原则的示例:


public class Employee

  private String firstName;

  private String lastName;

  private String email;

  

  // Constructor

public class EmployeeReport {

  public void generateEmployeeReport(Employee employee)

    // Generate employee report

  

}

第二原则:开闭原则

这个原则指出,一个类应该对扩展开放,对修改关闭。也就是说,在不改变原有代码的情况下,增加新的特性。一个好的例子就是使用接口。


public interface IOperation {

  public int performOperation(int num1, int num2);

}

public class Sum implements IOperation {

  public int performOperation(int num1, int num2) {

    return num1 + num2;

  }

}

public class Multiply implements IOperation {

  public int performOperation(int num1, int num2) {

    return num1 * num2;

  }

}

第三原则:里氏替换原则

这个原则指出,在任何时候都可以用子类对象替换掉父类对象。也就是说,一个子类可以(且应该)完全继承其父类的行为和特性。以下是一个使用里氏替换原则的示例:


public class Rectangle {

  protected int width;

  protected int height;

  

  // Constructor, getters and setters, calcArea() method

}

public class Square extends Rectangle {

  public Square(int side)

    width = side;

    height = side;

  

  

  // Override calculation of area, no need for both width and height

  public int calcArea() {

    return width * height;

  }

}

第四原则:依赖倒置原则

这个原则指出,高层次的模块不应该依赖底层次的模块,两者都应该依赖其抽象。以下是一个使用依赖倒置原则的示例:


public interface IAnimal {

  public void makeSound();

}

public class Dog implements IAnimal {

  public void makeSound() {

    System.out.println("Woof!");

  }

}

public class Cat implements IAnimal {

  public void makeSound() {

    System.out.println("Meow!");

  }

}

public class AnimalOwner {

  private IAnimal pet;

  

  public AnimalOwner(IAnimal pet)

    this.pet = pet;

  

  

  public void interact() {

    pet.makeSound();

  }

}

第五原则:接口隔离原则

这个原则指出,应该使用多个小的接口,而不是一个大的接口。一个好的接口应该只实现必要的功能,无需实现多余的方法。以下是一个使用接口隔离原则的示例:


public interface IShape {

  public double calcArea();

}

public interface I3DShape {

  public double calcVolume();

}

public class Sphere implements IShape, I3DShape {

  private double radius;

  

  // Constructor, getters and setters, calcArea(), calcVolume() methods

}

第六原则:迪米特法则

这个原则指出,一个类应该只与其朋友(即它直接交互的类)通信,而不应该和陌生类发生交互。这种交互方式避免了类之间的耦合性,并提高了代码的可维护性。以下是一个使用迪米特法则的示例:


public class Department {

  private List employees;

  

  public void addEmployee(Employee employee) {

    employees.add(employee);

  }

  

  public List getEmployees()

    return employees;

  

}

public class Employee getters and setters

public class HRDepartment {

  private Department department;

  

  public HRDepartment(Department department)

    this.department = department;

  

  

  public void printAllEmployees() {

    for (Employee employee : department.getEmployees()) {

      System.out.println(employee.getFirstName() + " " + employee.getLastName());

    }

  }

}

第七原则:合成复用原则

这个原则指出,应该优先使用合成或聚合等简单关系来实现复杂的功能。这种做法比继承更加灵活和可维护。以下是一个使用合成复用原则的示例:


public interface IShape {

  public double calcArea();

}

public class Rectangle implements IShape {

  private double length;

  private double width;

  

  public double calcArea() {

    return length * width;

  }

  

  // Constructor, getters and setters

}

public class Square implements IShape {

  private Rectangle rectangle;

  

  public Square(double side) {

    rectangle = new Rectangle();

    rectangle.setLength(side);

    rectangle.setWidth(side);

  }

  

  public double calcArea() {

    return rectangle.calcArea();

  }

}

第八原则:享元模式

这个模式指出,相同的对象应该共享同一个实例,而不是创建多个实例。这种做法可以大大节省内存空间。以下是一个使用享元模式的示例:


public interface IShape {

  public void draw(Graphics g, int x, int y);

}

public class Circle implements IShape {

  private Color color;

  

  public Circle(Color color)

    this.color = color;

  

  

  public void draw(Graphics g, int x, int y) {

    g.setColor(color);

    g.fillOval(x, y, 50, 50); // Draw circle

  }

}

public class ShapeFactory {

  private Map shapes = new HashMap<>();

  

  public IShape getCircle(Color color) {

    IShape circle = shapes.get(color);

    

    if (circle == null) {

      circle = new Circle(color);

      shapes.put(color, circle);

    }

    

    return circle;

  }

}

第九原则:策略模式

这个模式指出,应该定义一系列可以互相替换的算法,然后使用一个统一的接口对它们进行调用。这种做法可以使得算法的实现不会对客户端造成影响。以下是一个使用策略模式的示例:


public interface ISortStrategy {

  public void sort(int[] nums);

}

public class BubbleSort implements ISortStrategy {

  public void sort(int[] nums) {

    // Bubble sort implementation

  }

}

public class QuickSort implements ISortStrategy {

  public void sort(int[] nums) {

    // Quick sort implementation

  }

}

第十原则:模板方法模式

这个模式指出,应该定义一个算法的骨架,然后让子类来实现某些具体步骤。这种做法可以保证算法的完整性和稳定性,并且可以让子类在不改变算法整体结构的情况下更改算法的一些步骤。以下是一个使用模板方法模式的示例:


public abstract class Shape {

  protected String name;

  

  public Shape(String name) {

    this.name = name;

  }

  

  public void draw() {

    System.out.println("Drawing " + name);

    drawShape();

  }

  

  protected abstract void drawShape();

}

public class Rectangle extends Shape {

  public Rectangle() {

    super("Rectangle");

  }

  

  protected void drawShape() {

    System.out.println("Drawing rectangle");

  }

}

public class Circle extends Shape {

  public Circle() {

    super("Circle");

  }

  

  protected void drawShape() {

    System.out.println("Drawing circle");

  }

}

、十大原则、实例代码

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复