開閉原則, 對擴展開放、對修改關閉


開閉原則, 對擴展開放、對修改關閉

新需求的實現是通過新增加代碼來完成的,不是通過修改現有代碼完成的 例如要打折了,原有的代碼不修改,曾加一個派生類

只對應用程序中頻繁變化的部分進行抽象 比如Book這個抽象類中的

class Book(object):
    def __init__(self, name, price, author):
        self.name = name
        self.price = price
        self.author = author

    def get_name(self):
        pass

    def get_price(self):
        pass

    def get_author(self):
        pass

    def get_book_info(self):
        pass

class NovelBook(Book):
    def __init__(self, name, price, author):
        super(NovelBook, self).__init__(name, price, author)

    def get_name(self):
        return self.name

    def get_price(self):
        return self.price

    def get_author(self):
        return self.author

    def get_book_info(self):
        return "Book name: " + self.get_name() + "  Book author: " + self.get_author() + "  Book price: " + str(self.get_price()/100.0) + "元"

class OffNovelBook(NovelBook): ### 新增子類用於擴展 
    def __init__(self, name, price, author):
        super(OffNovelBook, self).__init__(name, price, author)

    # def get_name(self):
    #     return self.name

    def get_price(self):
        origin_price = super(OffNovelBook, self).get_price()
        off_price = 0
        if origin_price >= 5000:
            off_price = origin_price * 0.8
        else:
            off_price = origin_price * 0.9

        return off_price

    # def get_author(self):
    #     return self.author

    def get_book_info(self):
        off_book_info = super(OffNovelBook, self).get_book_info()

        return off_book_info

# 此處初始化區屬於高層次模塊因為業務需求變更也需要相應修改,但修改越少越好
class BookStore(object):
    def __init__(self):
        self.book_list = []
        self.book_list.append(OffNovelBook("西游記", 3000, "吳承恩"))         
        self.book_list.append(OffNovelBook("三國演義", 6000, "羅貫中"))
        self.book_list.append(OffNovelBook("紅樓夢", 8000, "曹雪芹"))

    def sell(self, book):
        print ("Sell Info: {}".format(book.get_book_info()))

        
if __name__ == '__main__':
    book_store = BookStore()
    for book in book_store.book_list:
        book_store.sell(book)

執行結果

Sell Info: Book name: 西游記 Book author: 吳承恩 Book price: 27.0元

Sell Info: Book name: 三國演義 Book author: 羅貫中 Book price: 48.0元

Sell Info: Book name: 紅樓夢 Book author: 曹雪芹 Book price: 64.0元


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM