6 대 설계 원칙 (6): 개폐 원칙

개폐 원칙 은 자바 세계 에서 가장 기본 적 인 디자인 원칙 으로 우리 가 어떻게 안정 적 이 고 유연 한 시스템 을 구축 하 는 지 지도 한다.
정의:
클래스, 모듈, 함수 와 같은 소프트웨어 실 체 는 확장 을 개방 하고 수정 을 닫 아야 합 니 다.
 
무슨 뜻 이 죠?
바로 당신 이 쓴 이런 종류 나 인터페이스, 함수 입 니 다. 수요 에 따라 수정 을 해 야 할 때 원본 코드 를 수정 하지 말고 원본 코드 를 확장 해 야 합 니 다.
 
서점 에서 책 을 파 는 밤 을 들 어 라.
 
 
interface IBook {
	//     
	public String getName();

	//     
	public int getPrice();

	//     
	public String getAuthor();
}

//    
class NovelBook implements IBook {

	private String name;
	private int price;
	private String author;

	public NovelBook(String name, int price, String author) {
		super();
		this.name = name;
		this.price = price;
		this.author = author;
	}

	@Override
	public String getName() {
		return name;
	}

	@Override
	public int getPrice() {
		return price;
	}

	@Override
	public String getAuthor() {
		return author;
	}

}

public class Client {

	private final static ArrayList<IBook> BOOK_LIST = new ArrayList<IBook>();

	static {
		BOOK_LIST.add(new NovelBook("    ", 3200, "  "));
		BOOK_LIST.add(new NovelBook("     ", 5600, "  "));
		BOOK_LIST.add(new NovelBook("    ", 3500, "  "));
		BOOK_LIST.add(new NovelBook("   ", 4300, "     "));
	}

	public static void main(String[] args) {
		NumberFormat format = NumberFormat.getCurrencyInstance();
		format.setMaximumFractionDigits(2);
		System.out.println("-----            :-----");
		for (IBook book : BOOK_LIST) {
			System.out.println("    :" + book.getName() + "\t    :"
					+ book.getAuthor() + "\t    :"
					+ format.format(book.getPrice() / 100.0) + " ");
		}
	}

}

 
수요 변화: 모든 40 원 이상 의 책 은 20% 할인 판매, 기타 20% 할인 판매.
 
IBook 은 인터페이스 로 서 안정 적 이 고 신뢰 할 수 있어 야 하 며 자주 변화 해 서 는 안 된다.
 
실현 클래스 의 getPrice 방법 을 수정 하 는 것 은 확실히 실현 할 수 있 지만 개폐 원칙 에 부합 되 지 않 는 다.
 
확장 을 통 해 변화 실현: 다른 클래스 쓰기 OffNovelBook 계승 NovelBook, getPrice 복사 방법.
 
class OffNovelBook extends NovelBook {

	public OffNovelBook(String name, int price, String author) {
		super(name, price, author);
	}

	@Override
	public int getPrice() {
		int selfPrice = super.getPrice();
		int offPrice = 0;
		if (selfPrice > 4000) {// 40  9 
			offPrice = selfPrice * 90 / 100;
		} else {//   8 
			offPrice = selfPrice * 80 / 100;
		}

		return offPrice;
	}

}

 
필드 클래스 의 정적 모듈 에서 수정 하기:
 
static {
		BOOK_LIST.add(new OffNovelBook("    ", 3200, "  "));
		BOOK_LIST.add(new OffNovelBook("     ", 5600, "  "));
		BOOK_LIST.add(new OffNovelBook("    ", 3500, "  "));
		BOOK_LIST.add(new OffNovelBook("   ", 4300, "     "));
	}

 
 
개폐 원칙 은 매우 공허 한 원칙 으로 앞의 5 가지 원칙 은 개폐 원칙 에 대한 구체 적 인 해석 이지 만 이 5 가지 원칙 에 국한 되 지 않 는 다.

좋은 웹페이지 즐겨찾기