Python版
https://github.com/faif/python-patterns/blob/master/structural/mvc.py
#!/usr/bin/env python# -*- coding: utf-8 -*-"""*TL;DR80Separates data in GUIs from the ways it is presented, and accepted."""class Model(object): ???def __iter__(self): ???????raise NotImplementedError ???def get(self, item): ???????"""Returns an object with a .items() call method ???????that iterates over key,value pairs of its information.""" ???????raise NotImplementedError ???@property ???def item_type(self): ???????raise NotImplementedErrorclass ProductModel(Model): ???class Price(float): ???????"""A polymorphic way to pass a float with a particular ???????__str__ functionality.""" ???????def __str__(self): ???????????first_digits_str = str(round(self, 2)) ???????????try: ???????????????dot_location = first_digits_str.index(‘.‘) ???????????except ValueError: ???????????????return (first_digits_str + ‘.00‘) ???????????else: ???????????????return (first_digits_str + ???????????????????????‘0‘ * (3 + dot_location - len(first_digits_str))) ???products = { ???????‘milk‘: {‘price‘: Price(1.50), ‘quantity‘: 10}, ???????‘eggs‘: {‘price‘: Price(0.20), ‘quantity‘: 100}, ???????‘cheese‘: {‘price‘: Price(2.00), ‘quantity‘: 10} ???} ???item_type = ‘product‘ ???def __iter__(self): ???????for item in self.products: ???????????yield item ???def get(self, product): ???????try: ???????????return self.products[product] ???????except KeyError as e: ???????????raise KeyError((str(e) + " not in the model‘s item list."))class View(object): ???def show_item_list(self, item_type, item_list): ???????raise NotImplementedError ???def show_item_information(self, item_type, item_name, item_info): ???????"""Will look for item information by iterating over key,value pairs ???????yielded by item_info.items()""" ???????raise NotImplementedError ???def item_not_found(self, item_type, item_name): ???????raise NotImplementedErrorclass ConsoleView(View): ???def show_item_list(self, item_type, item_list): ???????print(item_type.upper() + ‘ LIST:‘) ???????for item in item_list: ???????????print(item) ???????print(‘‘) ???@staticmethod ???def capitalizer(string): ???????return string[0].upper() + string[1:].lower() ???def show_item_information(self, item_type, item_name, item_info): ???????print(item_type.upper() + ‘ INFORMATION:‘) ???????printout = ‘Name: %s‘ % item_name ???????for key, value in item_info.items(): ???????????printout += (‘, ‘ + self.capitalizer(str(key)) + ‘: ‘ + str(value)) ???????printout += ‘\n‘ ???????print(printout) ???def item_not_found(self, item_type, item_name): ???????print(‘That %s "%s" does not exist in the records‘ % ?????????????(item_type, item_name))class Controller(object): ???def __init__(self, model, view): ???????self.model = model ???????self.view = view ???def show_items(self): ???????items = list(self.model) ???????item_type = self.model.item_type ???????self.view.show_item_list(item_type, items) ???def show_item_information(self, item_name): ???????try: ???????????item_info = self.model.get(item_name) ???????except: ???????????item_type = self.model.item_type ???????????self.view.item_not_found(item_type, item_name) ???????else: ???????????item_type = self.model.item_type ???????????self.view.show_item_information(item_type, item_name, item_info)if __name__ == ‘__main__‘: ???model = ProductModel() ???view = ConsoleView() ???controller = Controller(model, view) ???controller.show_items() ???controller.show_item_information(‘cheese‘) ???controller.show_item_information(‘eggs‘) ???controller.show_item_information(‘milk‘) ???controller.show_item_information(‘arepas‘)### OUTPUT #### PRODUCT LIST:# cheese# eggs# milk## PRODUCT INFORMATION:# Name: Cheese, Price: 2.00, Quantity: 10## PRODUCT INFORMATION:# Name: Eggs, Price: 0.20, Quantity: 100## PRODUCT INFORMATION:# Name: Milk, Price: 1.50, Quantity: 10## That product "arepas" does not exist in the records
【编程思想】【设计模式】【结构模式Structural】MVC
原文地址:https://www.cnblogs.com/demonzk/p/9035459.html