디자인 모델 2.0 - 소프트웨어 구조 디자인 의 7 대 원칙 인 리 씨 교체 원칙
5298 단어 디자인 모드 2.0
인용 의미: 자 류 는 부류 의 기능 을 확장 할 수 있 으 나 부류 의 원래 기능 을 바 꿀 수 없다.1. 자 류 는 부류 의 추상 적 인 방법 을 실현 할 수 있 으 나 부류 의 비 추상 적 인 방법 을 덮어 서 는 안 된다.2. 하위 클래스 에서 자신 만 의 독특한 방법 을 추가 할 수 있 습 니 다.3. 하위 클래스 의 방법 으로 부모 클래스 의 방법 을 다시 불 러 올 때 방법의 사전 조건 (즉, 방법의 입력 / 입 참) 은 부모 클래스 방법의 입력 매개 변수 보다 더 느슨 합 니 다.4. 하위 클래스 의 방법 으로 부모 클래스 의 방법 을 실현 할 때 (재 작성 / 재 업로드 또는 추상 적 인 방법 실현) 방법의 사후 조건 (즉, 방법의 출력 / 반환 값) 은 부모 클래스 보다 더욱 엄격 하거나 같다.
앞에서 개폐 원칙 을 말 할 때 복선 을 묻 었 습 니 다. 우 리 는 접 은 후에 부 류 를 덮어 쓰 는 getPrice () 방법 을 다시 쓰 고 소스 코드 를 얻 는 방법 getOrigin Price () 를 추가 한 것 을 기억 합 니 다. 분명히 리 씨 교체 원칙 에 어 긋 납 니 다.코드 를 수정 하 겠 습 니 다. getPrice () 방법 을 덮어 쓰 지 말고 getDiscountPrice () 방법 을 추가 해 야 합 니 다.
public class JavaDiscountCourse extends JavaCourse {
public JavaDiscountCourse(Integer id, String name, Double price) {
super(id, name, price);
}
public Double getDiscountPrice(){
return super.getPrice() * 0.61;
}
}
: 1、 , 。 2、 , , 、 。 。 , 、 , , Rectangle :
/**
* @author madongyu
* @projectName design-pattern-ma
* @description: TODO
* @date 2019/6/1817:28
*/
public class Rectangle {
private long height;
private long width;
public long getHeight() {
return height;
}
public void setHeight(long height) {
this.height = height;
}
public long getWidth() {
return width;
}
public void setWidth(long width) {
this.width = width;
}
}
Square :
/**
* @author madongyu
* @projectName design-pattern-ma
* @description: TODO
* @date 2019/6/1817:28
*/
public class Square extends Rectangle{
private long length;
public long getLength() {
return length;
}
public void setLength(long length) {
this.length = length;
}
@Override
public long getHeight() {
return getLength();
}
@Override
public void setHeight(long height) {
setLength(height);
}
@Override
public long getWidth() {
return getLength();
}
@Override
public void setWidth(long width) {
setLength(width);
}
}
/**
* @author madongyu
* @projectName design-pattern-ma
* @description: TODO
* @date 2019/6/1817:31
*/
public class Test {
public static void resize(Rectangle rectangle){
while (rectangle.getWidth() >= rectangle.getHeight()){
rectangle.setHeight(rectangle.getHeight() + 1);
System.out.println("width:"+rectangle.getWidth() + ",height:"+rectangle.getHeight());
}
System.out.println("resize " +
"
width:"+rectangle.getWidth() + ",height:"+rectangle.getHeight());
}
public static void main(String[] args) {
Rectangle rectangle = new Rectangle();
rectangle.setWidth(20);
rectangle.setHeight(10);
resize(rectangle);
}
}
, 。 , Rectangle Square, :
public static void main(String[] args) {
Square square = new Square();
square.setLength(10);
resize(square);
}
, , , 。 , 。 , 。 Quadrangle :
public interface Quadrangle {
long getWidth();
long getHeight();
}
Rectangle :
public class Rectangle implements Quadrangle {
private long height;
private long width;
@Override
public long getWidth() {
return width;
}
public long getHeight() {
return height;
}
public void setHeight(long height) {
this.height = height;
}
public void setWidth(long width) {
this.width = width;
}
}
Square :
public class Square implements Quadrangle {
private long length;
public long getLength() {
return length;
}
public void setLength(long length) {
this.length = length;
}
@Override
public long getWidth() {
return length;
}
@Override
public long getHeight() {
return length;
}
}
, resize() Quadrangle , 。 Square setWidth() setHeight() 。 , ,resize() Rectangle 。