1设计模式之软件设计七大原则

37次阅读

共计 2328 个字符,预计需要花费 6 分钟才能阅读完成。

1、开闭原则

1.1、定义

 一个软件实体如类、模块和函数应该 ` 对扩展开放, 对修改关闭 `。用抽象构建框架, 用实现扩展细节。优点:提高软件系统的可复用性以及可维护性 

1.2、代码演示

public interface ICourse {Integer getId();
    String getName();
    Double getPrice();}
public class JavaCourse implements ICourse{
    private Integer Id;
    private String name;
    private Double price;
    public JavaCourse(Integer id, String name, Double price) {
        this.Id = id;
        this.name = name;
        this.price = price;
    }

    public Integer getId() {return this.Id;}

    public String getName() {return this.name;}

    public Double getPrice() {return this.price;}
}
// 如果需要在原有功能基础上添加一个获取打折价格的功能, 开闭原则建议不要修改原有接口, 这里可以继承原有 JavaCourse 类,
// 在原有功能之上扩展
public class JavaDiscountCourse extends JavaCourse {public JavaDiscountCourse(Integer id, String name, Double price) {super(id, name, price);
    }

    public Double getDiscountPrice(){return super.getPrice()*0.8;
    }
}

2、开闭原则

2.1、定义

` 高层模块不应该依赖低层模块 `,二者都应该依赖其抽象。抽象不应该依赖细节,细节应该依赖抽象。针对接口编程,不要针对实现编程。优点:可以减少类之间的耦合性,提高系统的稳定性,提高代码可读性和可维护性,可降低修改程序所造成的风险。

2.2、代码演示

public interface ICourse {void studyCourse();
}

public class JavaCourse implements ICourse {

    @Override
    public void studyCourse() {System.out.println("Geely 在学习 Java 课程");
    }
}

public class PythonCourse implements ICourse {
    @Override
    public void studyCourse() {System.out.println("Geely 在学习 Python 课程");
    }
}
public class Geely {public void setiCourse(ICourse iCourse) {this.iCourse = iCourse;}

    private ICourse iCourse;

    public void studyImoocCourse() {iCourse.studyCourse();
    }

}
public class Test {public static void main(String[] args) {Geely geely = new Geely();
        geely.setiCourse(new JavaCourse());
        geely.studyImoocCourse();

        geely.setiCourse(new FECourse());
        geely.studyImoocCourse();}
}

3、单一职责原则

3.1、定义

 不要存在多于一个导致类变更的原因。一个类 / 接口 / 方法只负责一项职责。优点:降低类的复杂度、提高类的可读性、提高系统的可维护性、降低变更引起的风险。

3.2、代码演示

// 不推荐的写法
public class Bird {public void mainMoveMode(String birdName){if("鸵鸟".equals(birdName)){System.out.println(birdName+"用脚走");
        }else{System.out.println(birdName+"用翅膀飞");
        }
    }
}
public class FlyBird {public void mainMoveMode(String birdName){System.out.println(birdName+"用翅膀飞");
    }
}

public class WalkBird {public void mainMoveMode(String birdName){System.out.println(birdName+"用脚走");
    }
}
public class Test {public static void main(String[] args) {
        // 不推荐写法
        Bird bird = new Bird();
        bird.mainMoveMode("大雁");
        bird.mainMoveMode("鸵鸟");

        // 推荐写法, 功能单一
        FlyBird flyBird = new FlyBird();
        flyBird.mainMoveMode("大雁");

        WalkBird walkBird = new WalkBird();
        walkBird.mainMoveMode("鸵鸟");
    }
}

4、单一职责原则

4.1、定义

 用多个专门的接口,而不使用单一的总接口。客户端不应该依赖它不需要的接口。一个类对另一个类的依赖应该建立在最小的接口上。建立单一接口,不要建立庞大臃肿的接口。` 尽量细化接口,接口中的方法尽量少 `。适度原则,一定要适度。优点:符合我们常说的高内聚低耦合的设计思想,

4.2、代码演示

正文完
 0