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

Python版

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

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
@author: Gordeev Andrey <[email protected]>

*TL;DR80
Provides a centralized entry point that controls and manages request handling.
"""

class MobileView(object):

    def show_index_page(self):
        print(‘Displaying mobile index page‘)

class TabletView(object):

    def show_index_page(self):
        print(‘Displaying tablet index page‘)

class Dispatcher(object):

    def __init__(self):
        self.mobile_view = MobileView()
        self.tablet_view = TabletView()

    def dispatch(self, request):
        if request.type == Request.mobile_type:
            self.mobile_view.show_index_page()
        elif request.type == Request.tablet_type:
            self.tablet_view.show_index_page()
        else:
            print(‘cant dispatch the request‘)

class RequestController(object):
    """ front controller """

    def __init__(self):
        self.dispatcher = Dispatcher()

    def dispatch_request(self, request):
        if isinstance(request, Request):
            self.dispatcher.dispatch(request)
        else:
            print(‘request must be a Request object‘)

class Request(object):
    """ request """

    mobile_type = ‘mobile‘
    tablet_type = ‘tablet‘

    def __init__(self, request):
        self.type = None
        request = request.lower()
        if request == self.mobile_type:
            self.type = self.mobile_type
        elif request == self.tablet_type:
            self.type = self.tablet_type

if __name__ == ‘__main__‘:
    front_controller = RequestController()
    front_controller.dispatch_request(Request(‘mobile‘))
    front_controller.dispatch_request(Request(‘tablet‘))

    front_controller.dispatch_request(Request(‘desktop‘))
    front_controller.dispatch_request(‘mobile‘)

### OUTPUT ###
# Displaying mobile index page
# Displaying tablet index page
# cant dispatch the request
# request must be a Request object

Python转载版

原文地址:https://www.cnblogs.com/demonzk/p/9035452.html

时间: 2024-10-01 03:15:34

【编程思想】【设计模式】【结构模式Structural】front_controller的相关文章

【编程思想】【设计模式】【结构模式Structural】享元模式flyweight

Python版 https://github.com/faif/python-patterns/blob/master/structural/flyweight.py #!/usr/bin/env python # -*- coding: utf-8 -*- """ *References: http://codesnipers.com/?q=python-flyweights *TL;DR80 Minimizes memory usage by sharing data w

【编程思想】【设计模式】【结构模式Structural】门面模式/外观模式Facade

Python版 https://github.com/faif/python-patterns/blob/master/structural/facade.py #!/usr/bin/env python # -*- coding: utf-8 -*- """ *What is this pattern about? The Facade pattern is a way to provide a simpler unified interface to a more com

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

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(obje

【编程思想】【设计模式】【结构模式Structural】代理模式Proxy

Python版 https://github.com/faif/python-patterns/blob/master/structural/proxy.py #!/usr/bin/env python # -*- coding: utf-8 -*- """ *TL;DR80 Provides an interface to resource that is expensive to duplicate. """ from __future__

面向对象编程思想-中介者模式

一.引言 前两天休息日在网上打QQ斗地主,每盘结束后腾讯游戏平台会自动计算输赢的欢乐豆,嗯?挺好的,平时在面对面玩斗地主时,一盘游戏结束后,我们需要了解每个人的出牌状况,然后算出来输赢.现在有了游戏平台,玩家之间计算输赢这个操作交给了游戏平台,我们不再需要了解每个人的出牌状况.在软件设计中,我们将解决这种业务场景的模式称之为中介者模式 二.中介者模式 定义:用一个中介对象来封装一系列对象的交互.中介者使各对象不需要显式的相互引用,从而使其耦合松散,而且独立改变它们之间的交互. 下面是中介者模式结

面向对象编程思想-简单工厂模式

一.引言 简单工厂.工厂方法.抽象工厂模式都属于设计模式中的创建型设计模式,它们帮助我们把对象的实例化部分抽取出来,进而优化系统架构,提高系统的扩展性.本文介绍一个比较容易理解的模式-简单工厂模式. 二.简单工厂模式 定义:"工厂"?!看到这个词语,在现实生活中大家会想到是生产产品的,同样,在简单工厂模式里大家可以理解为工厂其实就是创建对象的一个类.平时我们编程的时候,当使用"new"创建对象时,此类就增加了对该对象的依赖,它们之间的耦合度就增加了,这样当业务需求变

七、适配器(Adapter)模式--结构模式(Structural Pattern)

适配器模式:把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作. 类的 Adapter模式的结构: 类适配器类图: 由图中可以看出,Adaptee 类没有 Request方法,而客户期待这个方法.为了使客户能够使用 Adaptee 类,提供一个中间环节,即类Adapter类, Adapter 类实现了 Target 接口,并继承 自 Adaptee,Adapter 类的 Request 方法重新封装了Adaptee 的SpecificRequ

九、 合成(Composite)模式 --结构模式(Structural Pattern)

合成模式:有时又叫做部分-整体模式(Part-Whole).合成模式将对象组织到树结构中,可以用来描述整体与部分的关系.合成模式可以使客户端将单纯元素与复合元素同等看待. 合成模式分为安全式和透明式 安全式合成模式类图: 抽象构件(Component)角色:这是一个抽象角色,它给参加组合的对象定义出公共的接口及其默认行为,可以用来管理所有的子对象.在安全式的合成模式里,构件角色并不是定义出管理子对象的方法,这一定义由树枝构件对象给出. 树叶构件(Leaf)角色:树叶对象是没有下级子对象的对 象,

设计模式--结构模式--门面模式

一.基本概念 1.外观模式(Facade),也被称为"门面模式".定义了一个高层.统一的接口,外部通过这个统一的接口对子系统中的一群接口进行访问. 2.角色 A:外观(Facade)角色:为多个子系统对外提供一个共同的接口. B:子系统(Sub System)角色:实现系统的部分功能,客户可以通过外观角色访问它. C:客户(Client)角色:通过一个外观角色访问各个子系统的功能. 二.例子. 分诊台作为患者和医生的装饰. A:外观(Facade)角色: 1 package comm.