python实践设计模式(一)概述和工厂模式
2013-05-10 15:07
246 查看
目录
python实践设计模式(一)概述和工厂模式python实践设计模式(二)Builder,Singleton,Prototype
学习python有一段时间,之前就是看看书,最后发现只有实践才能真正学到东西,只有在解决问题中才能真正掌握。之前大牛也有用python实现各种设计模式的,我自己参考之前在学习用C#实现设计模式的经历,也想把23种模式逐一实践,从网上查了一些资料,才明白python虽然是面向对象的,但是和C#,java语言不太一样。影响设计方法不一样有以下几点:
1.python没有接口Interface的类型。
2.由于《Design Patterns—Elements of Reusable Object-Oriented Software》一书采用的是C++来讲述设计模式,因此访问控制符(public、protected和private等关键字)和静态成员方法(类方法)等都可以直接使用,但是这些特性在Python中都无法用到,原因是Python采了与C++完全不同的对象模式。
3.python不是强类型,弱化了多态的概念,一个对象很少只是一个类的实例,而是可以在运行时动态改变,支持相同请求的不同对象针对同一请求所触发的操作可能完全不同。
4.python代码生存在modules中而不必须在class中。
5.python有一些特殊语法运用了设计模式(如decorator ),可以直接应用。
有了以上的不同,就注定python在运用设计模式上与其他面向对象语言的不同,下面是我尝试的实现。
《Design Patterns》一书把设计模式分为了3大类,创建型模式(creational pattern)、结构型模式(structural pattern)和行为型模式(behavioral patterns)。
[b] 一. 创建型模式(creational pattern)[/b]
对类的实例化过程进行了抽象,能够使软件模块做到与对象创建和组织的无关性。为了使体系结构更加清晰,一些软件在设计上要求当创建类的具体实例时,能够根据具体的语境来动态地决定怎样创建对象,创建哪些对象,以及怎样组织和表示这些对象,而创建型模式所要描述的就是该如何来解决这些问题。
创建型模式包括以下几种:
Simple Factory模式
专门定义一个类来负责创建其它类的实例,被创建的实例通常都具有共同的父类。
Factory Method模式
将对象的创建交由父类中定义的一个标准方法来完成,而不是其构造函数,究竟应该创建何种对象由具体的子类负责决定。
Abstract Factory模式
提供一个共同的接口来创建相互关联的多个对象。
Singleton模式
保证系统只会产生该类的一个实例,同时还负责向外界提供访问该实例的标准方法。
Builder模式
将复杂对象的创建同它们的具体表现形式(representation)区别开来,这样可以根据需要得到具有不同表现形式的对象。
Prototype模式
利用一个能对自身进行复制的类,使得对象的动态创建变得更加容易。
本次先实践Simple Factory模式,Factory Method模式和 Abstract Factory模式,其他模式后续会涉及。
1.Simple Factory模式
Simple Factory模式不是独立的设计模式,他是Factory Method模式的一种简单的、特殊的实现。他也被称为静态工厂模式,通常创建者的创建方法被设计为static方便调用,但是python没有static一说。所以可以把创建者也就是工厂设计为一个普通class或全局函数即可。如果是class还需要实例化才能调用工厂方法,而全局函数比较简单,比较接近静态工厂的简便特性。
Simple Factory模式包含以下角色部分,UML可参考下图:
1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。由一个具体类实现,通常该类的工厂方法是静态的。在python中工厂为一个普通class或全局函数。
2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。由接口或者抽象类来实现。在python中抽象产品一般为父类。
3) 具体产品角色:工厂类所创建的对象就是此角色的实例。由一个具体类实现。
Abstract Factory
class Newcar: '''Abstract Product''' def drive(self): pass class NewBMW(Newcar): '''Concrete Product''' def __init__(self,carname): self.__name=carname def drive(self): print "Drive the New BMW as "+self.__name class NewBenz(Newcar): '''Concrete Product''' def __init__(self,carname): self.__name=carname def drive(self): print "Drive the New Benz as "+self.__name class Oldcar: '''Abstract Product''' def drive(self): pass class OldBMW(Oldcar): '''Concrete Product''' def __init__(self,carname): self.__name=carname def drive(self): print "Drive the Old BMW as "+self.__name class OldBenz(Oldcar): '''Concrete Product''' def __init__(self,carname): self.__name=carname def drive(self): print "Drive the Old Benz as "+self.__name class driver: '''Abstract Factory also called Creator''' def driverNewCar(self): return Newcar() def driverOldCar(self): return Oldcar() class BMWdriver(driver): '''Concrete Factory or Creator''' def driverNewCar(self): return NewBMW("NewBMW") def driverOldCar(self): return OldBMW("OldBMW") class Benzdriver(driver): '''Concrete Factory or Creator''' def driverNewCar(self): return NewBenz("NewBenz") def driverOldCar(self): return OldBenz("OldBenz") if __name__ == "__main__": driver=BMWdriver() car=driver.driverNewCar() car.drive() car=driver.driverOldCar() car.drive() driver=Benzdriver() car=driver.driverNewCar() car.drive() car=driver.driverOldCar() car.drive()
未完待续……
相关文章推荐
- 设计模式实践-反射到所有接口实现类实践工厂方法,页面中有大量计算数据时设计实践
- Python实现设计模式--02.工厂模式(Factory Pattern)
- 23种设计模式之python实现--抽象工厂
- 设计模式讲解与代码实践(三)——工厂方法
- [Design Pattern]Python设计模式——工厂方法
- 设计模式之python版(五)--工厂方法
- python实现的工厂方法--设计模式初级
- python设计模式 之 简单工厂模式
- Python设计模式之工厂模式简单示例
- 设计模式的概述与工厂设计模式
- Python 设计模式 --抽象工厂设计模式
- Python3 设计模式_工厂模式
- 翻译-精通python设计模式-工厂模式
- python实现设计模式(一、工厂模式)
- 实例讲解Python设计模式编程之工厂方法模式的使用
- python设计模式(1)-Simple Factory(Static Factory)(简单工厂)
- python设计模式-工厂模式
- 翻译-精通python设计模式-工厂模式
- 设计模式一(简单工厂,采用python实现)
- 工厂设计模式实践