首页 > Web开发 > 详细

【编程思想】【设计模式】【结构模式Structural】MVC

时间:2018-05-14 12:21:56      阅读:202      评论:0      收藏:0      [点我收藏+]

Python版

 

https://github.com/faif/python-patterns/blob/master/structural/mvc.py

技术分享图片
#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
*TL;DR80
Separates 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 NotImplementedError


class 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 NotImplementedError


class 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
Python转载版

 

【编程思想】【设计模式】【结构模式Structural】MVC

原文:https://www.cnblogs.com/demonzk/p/9035459.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!