首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

扩展──页面重构中模块化设计(五)

扩展──页面重构中模块化设计(五) 由 Ghostzhang 发表于 2010-06-11 19:24 扩展 是这个系列主要内容,上一篇《 模块化核心思想──页面重构中模块化设计...也就是说,当出现多个类似的模块时,包含了这些模块大部分效果(或者理解为公共部分),在基础上,我们可以通过添加很少代码——扩展,来达到所需要要效果。...……5分钟过去了……差不多有方案了,按上面的思路,是包含了大部分效果,也就是说应该能满足大部分效果需要,两个模块间差异地方,可以通过扩展来完成。...所以我们可以把这两个模块看成类似模块。另个,以哪个为呢?从满足大部分效果这个要求来看,很明显A模块做为是要比B模块做为更合适,如果用B模块做,那么需要写更多扩展来满足A需要。...*/ 别忘了提示条,虽然是用于模块中,但它应该是可以被更广泛使用模块,因此我把它单独提了出来: /* S 提示条 */ .mode_hint{position:relative;margin:

70250
您找到你想要的搜索结果了吗?
是的
没有找到

python抽象

与jvm上语言不一样,python语言没有interface关键字,而且除了抽象,每个都有相应接口:实现或继承公开属性(方法或数据类型) 在定义里,受保护属性和私有属性不在接口中:即便...“鸭子类型”:忽略对象真正类型,转而关注对象有没有实现所需方法,签名和语义。 继承抽象很简单,只要实现python里特殊方法__len__之类,这样python就会自动识别。...抽象继承大多都是在collections模块,现在打开这个模块文档看看。...,分为三层: --顶层是Iterable,Container,Sized,Callable,Hashable: 其中Iterable,Container,Sized是各个集合该继承三个抽象,或者至少实现兼容协议...return True break return NotImplemented 取出一个来看__subclasshook__这个方法,这个是用于检查继承是否确实是

86410

iOS_实例、、元之间关系+结构体

文章目录 isa指针 superClass 对象结构体 结构体 分类结构体 isa指针 OC中任何定义都是对象,任何对象都有isa指针。isa是一个Class类型指针。...实例isa指针,指向isa指针,指向元; 元isa指针,指向根元; 父元isa指针,也指向根元!! 根元isa指针,指向它自己!!...superClass superClass指向父; 父superClass指向根; 根superClass指向nil; 元superClass指向父元; 父元superClass...指向根元; 根元superClass指向根!!!!...而此时内存分布已经确定 (若此时再修改分布情况,对编程性语言是灾难,是不允许) 发送消息查找过程?

84110

Python中协议 、鸭子类型 、 抽象 、混入

三、抽象 抽象就是定义各种方法而不做具体实现,任何继承自抽象必须实现这些方法,否则无法实例化。 那么抽象这样实现目的是什么呢? 假设我们在写一个关于动物代码。...概括一下抽象作用:定义一些共同事物规则和行为。...注意,自己定义抽象要继承 abc.ABC(abc.ABC 是 Python 3.4 新增,python2语法不是这样)。...print(issubclass(Cat, Animal)) 输出: True 这种通过注册和抽象关联起来叫做虚拟子类,虚拟子类不会继承注册抽象,而且任何时候都不会检查它是否符合抽象接口...Django在这方面做很好,举一个例子, ListView主要用于从数据库中获取多条记录,它继承关系如下: ? 整个体系非常清晰,各个职责也非常明确,且职责从命名就可以读出。

1.8K20

C++:43---派生转换、静态动态变量

二、转换本质 派生可以转换为本质是: ①为什么派生可以转换为:派生而来,因此派生中包含了方法和成员。...此时可以通过指针或引用指向派生(相当于将派生中继承那部分方法和成员绑定到上了,相当于派生被截断了),然后就可以将派生假装是一个对象来使用(调用其中成员/方法) ②为什么不能转换为派生...如果将一个对象绑定到派生指针/引用上,此时派生通过指针/引用访问自己新定义成员/方法时,发现找不到(因此不能将转换为派生) 例如:下面B继承于A,子类继承于父,同时为父成员开辟了空间...,因为其只能与自己类型一致对象绑定到一起 演示案例 当我们使用引用(或指针)时,我们并不清楚该引用(或指针)所绑定对象真实类型,该对象可能是对象,也可能是派生对象。...,但是多态只有发生在指针/引用指向于派生情况下才会发生,此处是普通对象,而不是引用/指针,因此访问还是A中show2()函数 ?

1.6K10

C++中派生成员访问形式

C++中派生成员访问形式主要有以下两种: 1、内部访问:由派生中新增成员对继承来成员访问。 2、对象访问:在派生外部,通过派生对象对从继承来成员访问。...今天给大家介绍在3中继承方式下,派生成员访问规则。...private成员在私有派生中是不可直接访问,所以无论是派生成员还是通过派生对象,都无法直接访问从继承来private成员,但是可以通过提供public成员函数间接访问。...private成员在私有派生中是不可直接访问,所以无论是派生成员还是派生对象,都无法直接访问从继承来private成员,但是可以通过提供public成员函数直接访问它们。...private成员在私有派生中是不可直接访问,所以无论是派生成员还是通过派生对象,都无法直接访问private成员。

2.3K70

Python中接口协议和抽象

抽象 Python抽象是指必须让继承它子类去实现它所要求方法。...Pythoncollections.abc模块中就定义了很多抽象: 虽然我们在实际编程中并不会自己编写抽象(一般也不建议这样做,因为可能会导致意想不到问题),但是了解抽象,可以帮助我们更好理解...白鹅类型是指只要cls是抽象(即cls是abc.ABCMeta),就可以使用isinstance(obj, cls)。它基本特性是,即便不继承,也有办法把一个注册为抽象虚拟子类。...Python不会检查虚拟子类是否实现了抽象要求实现方法,而是由我们自己保证,并捕获异常。具体会在下篇文章《Python抽象定义与使用》进行介绍。...参考资料: 《流畅Python》第11章 接口:从协议到抽象

1.7K30

PHP学习---ThinkCMF三个

在application/Common/Controller下有以下几个: |-AppframeController ----- ThinkCMF框架控件器,继承至Action...框架前台控件器,继承至AppframeController |-MemberbaseController ----- ThinkCMF框架会员控件器,继承至HomeBaseController...对于AdminbaseController和HomeBaseController它们一个重要方法display, 分别用于管理后台和前台模板显示, 如果你action继承了AdminbaseAction...对于MemberbaseController,继承这个Controller会帮你判断会员相关操作,比如用户是否已经登陆,用户是否有权限访问此url。...在开发时候,一定要在自己创建Controller之前想好你Controller要完成什么功能,再去让它extends相应

45930

一个简单实用线程

这篇文章介绍线程CThreadBase,其将线程资源封装成对象,提供生命周期控制接口,派生覆盖相应虚函数进行业务功能实现。 ?...结束线程Stop(),同步接口,线程退出运行时才会返回,有效控制线程生命周期,同步结束线程对于某些业务场景很重要,比如需要线程结束后才能释放相应资源。内部使用内核对象Event进行同步。...OnRun()在线程运行时调用,其参数strParam是由Start接口透传过来,只有OnStart()返回true,才会被调用,线程要处理工作在该函数中实现。...(condition)) { DebugBreak(); } #else #define THREAD_BASE_ASSERT(condition) ((void)0) #endif /** 线程...,提供线程启动(异步)、结束(同步)功能 */ class CThreadBase { public: CThreadBase(); virtual ~CThreadBase();

1.3K52

Codeigniter中对核心扩展

Codeigniter框架提供了实现多个应用Application方法,如参考资料[2]中描述,这种方法实际上是在网站目录下存在多个入口文件和Application文件夹方式。...所以一般我在开发后台时候,喜欢在 controller 目录下建立一个单独后台文件夹,例如 controller/admin/,这样就可以实现Model共用。...Controller中文件需要一些公共方法,在Codeigniter中,当我们需要在所有的控制器Controller中添加一些公共方法时,可以考虑对Controller进行扩展。...例如用户登录检查函数,具体方法我们可以参考[1]中描述。如果我前台页面不需要检查登录,后台页面需要检查登录,使用这种方法就会有问题。...扩展核心实现代码,位于System/Core/Codeigniter.php第214行,代码如下: 1: if (file_exists(APPPATH.'core/'.

1.9K20
领券