读书笔记----软件设计原则、设计模式

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/2021Softwarecodedevelopmenttechnology/
这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/2021Softwarecodedevelopmenttechnology/homework/11833
这个作业的目标 学习软件设计模式和设计原则

参考资料

《大话设计模式》---程杰

内容归纳

设计模式的六大原则

1.开放封闭(简称开闭)原则:简称OCP,软件实体(类,模块,函数等)应该是可以扩展,但是不可修改的。

2.单一职责原则:简称SRP,一个类或者一个方法只负责一项职责。

3.里氏代换原则:简称LSP,子类可以扩展父类的功能,但不能改变原有父类的功能。

4.依赖倒置原则:简称DIP,面向接口编程。

5.接口隔离原则:简称ISP,建立单一接口。

6.迪米特原则:简称LOD,最少知道原则,尽量降低类与类之间的耦合。

部分原则模式概况

1.单一职责原则

1.1 就一个类而言,应该仅有一个引起它变化的原因

1.2 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。

1.3 软件设计真正要做的许多内容,就是发现职责并把哪些职责相互分离。如果有多于一个的动机去改变一个类,这个类就具有多余一个的职能。

2.开放封闭原则

2.1 开闭原则是指软件实体(类,模块,函数等)应该是可以扩展,但是不可修改的。

2.1.1对于扩展是开放的

2.1.2对于更改是封闭的

2.2 无论模块多么的“封闭”,都会存在一些无法对之封闭的变化。设计人员必须对于他设计的模块应该对那种变化变化封闭做出选择。

2.3在代码编写之初,假设变化不会发生,当发生变化时,我们就创建抽象来隔离以后发生的同类变化。

2.4好处是可维护,可扩展,可复用,灵活性好开发人员应该仅对程序中呈现出频繁变化的那些部分做出抽象。

3.依赖倒置原则

3.1 抽象不应该依赖细节,细节应该依赖于抽象。针对接口编程,不要对现实编程。

3.2是面向对象设计的标志,如果编写时考虑的都是如何针对抽象编程而不是针对细节编程,即程序中所有的依赖关系都是终止于接口,就是面向对象设计。

4.装饰模式

4.1 需要把所需的功能按正确的顺序串联起来进行控制。

4.2 装饰模式,动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。

4.3 装饰模式是为已有功能动态地添加更多功能的一种方式。

主要实现(JAVA),以画图为接口,实现各种图形的作画

1.首先创建一个接口

public interface Shape {
   void draw();
}

2.创建方形和圆形的实体类

public class Rectangle implements Shape {
 
   @Override
   public void draw() {
      System.out.println("Shape: Rectangle");
   }
}

public class Circle implements Shape {
 
   @Override
   public void draw() {
      System.out.println("Shape: Circle");
   }
}

3.创建Shape接口的抽象修饰类

public abstract class ShapeDecorator implements Shape {
   protected Shape decoratedShape;
 
   public ShapeDecorator(Shape decoratedShape){
      this.decoratedShape = decoratedShape;
   }
 
   public void draw(){
      decoratedShape.draw();
   }  
}

4.创建扩展了ShapeDecorator类的实体装饰类

public class RedShapeDecorator extends ShapeDecorator {
 
   public RedShapeDecorator(Shape decoratedShape) {
      super(decoratedShape);     
   }
 
   @Override
   public void draw() {
      decoratedShape.draw();         
      setRedBorder(decoratedShape);
   }
 
   private void setRedBorder(Shape decoratedShape){
      System.out.println("Border Color: Red");
   }
}

5.创建RedShapeDecorator来修饰Shape对象

public class DecoratorPatternDemo {
   public static void main(String[] args) {
 
      Shape circle = new Circle();
      ShapeDecorator redCircle = new RedShapeDecorator(new Circle());
      ShapeDecorator redRectangle = new RedShapeDecorator(new Rectangle());
     
      System.out.println("Circle with normal border");
      circle.draw();
 
      System.out.println("\nCircle of red border");
      redCircle.draw();
 
      System.out.println("\nRectangle of red border");
      redRectangle.draw();
   }
}

结果

image-20210316200221057

心得体会

​ 之前的项目开发经历比较少,最主要的有共鸣的就是装饰器模式的设计模式,将多个有共同特点的实体类找出其中的共同点,然后创建它的接口再根据实体的属性来进行扩展,感觉会比较规范整洁。

博客园的后台编辑界面

posted @ 2021-03-16 20:11  imenist  阅读(79)  评论(0)    收藏  举报