• 设计模式的目的


    开闭原则:

      你写了一个代码,别人要来扩展它。如果满足了开闭原则,那个人是不需要更改你的代码及可以达到他的目的。

      对扩展开放,对修改关闭;

    里氏代换原则:

      对开闭原则的补充

      当一个方法调用基类时,调用子类能运行。比方来说:

      两个基类:

     1 //长方形类:
     2 public class Rectangle{
     3 ...
     4 setWidth(int width){
     5 this.width=width;
     6 }
     7 setHeight(int height){
     8 this.height=height
     9 }
    10 }
    11 //正方形类:
    12 public class Square{
    13 ...
    14 setWidth(int width){
    15 this.width=width;
    16 this. height=width;
    17 }
    18 setHeight(int height){
    19 this.setWidth(height);
    20 }
    21 }
    View Code

      方法:

    1 public void resize(Rectangle r){
    2 while(r.getHeight()<=r.getWidth){
    3 r.setHeight(r.getWidth+1);
    4 }
    5 }
    View Code

      当方法中参数为基类时,运行正常,而当方法参数为子类时,发现会陷入无线循环中。则不满足LSP原则。

      解决方法:

          1:创建一个新的抽象类C,作为两个具体类的超类,将A,B的共同行为移动到C中来解决问题。

          2:从B到A的继承关系改为委派关系。

    合成/聚合复用原则:

      只有当以下的条件全部被满足时,才应当使用继承关系。

             1. 子类是超类的一个特殊种类,而不是超类的一个角色,也就是区分“Has-A”和“Is-A”.只有“Is-A”关系才符合继承关系,“Has-A”关系应当使用聚合来描述。

             2 .永远不会出现需要将子类换成另外一个类的子类的情况。如果不能肯定将来是否会变成另外一个子类的话,就不要使用继承。

             3 .子类具有扩展超类的责任,而不是具有置换掉或注销掉超类的责任。如果一个子类需要大量的置换掉超类的行为,那么这个类就不应该是这个超类的子类。

       ”Is-A”代表一个类是另外一个类的一种;而“Has-A”代表一个类是另外一个类的一个角色,而不是另外一个类的特殊种类(Is-A A继承B , Has-A A是B的组成部分。)

       合成/聚合 编程使用方法:

    1 class A{
    2  B b;
    3  public void function(){
    4 }      
    5 }
    View Code

        

     

  • 相关阅读:
    Qt之添加QLabel的点击事件
    Qt之布局管理--基本布局
    Qt之界面实现技巧
    Qt之键盘讲解
    Qt之多窗口切换
    Qt之自定义信号和槽函数
    Qt之重写QLabel类
    mysql学习(四)-字段类型
    mysql学习(三)
    mysql 复习与学习(二)数据库及表结构的创建删除
  • 原文地址:https://www.cnblogs.com/canbefree/p/3727198.html
Copyright © 2020-2023  润新知