首页 > 代码库 > 研磨设计模式解析及python代码实现——(一)简单工厂模式

研磨设计模式解析及python代码实现——(一)简单工厂模式

  最近在学设计模式,正巧书之前学了些python,但用的还不是很成熟。《研磨设计模式》书上只给了java代码,本着以练手为目标,我照着书上打了一遍java代码,在仔细体会其思想后,将其写成了python的代码。有不对的地方希望各位批评指正~

  具体原理不多做介绍,具体可以参考http://chjavach.iteye.com的博客,或者《研磨设计模式》的书。

一、背景介绍

  接口思想:

    众所周知,面向对象语言最大的特点便是封装,继承,多态这三个概念。而像Java等面向对象语言最核心的思想便是"面向接口编程"。Java中的接口是一种特殊的抽象类,其所有方法均为抽象方法,所有属性均为常量。即只有方法定义而没有方法实现。

    那接口的作用又是什么呢?说白了就是约束实现类的行为,实现类的功能包含不仅限于接口所约束的功能。除此之外,接口还可以保证系统具有更好的扩展性和可维护性。即内部变化只要接口不变,便不会影响到外部应用。

    面向接口编程的核心思想便是"封装隔离"。封装是指"封装隔离体的行为",隔离则是指隔离外部调用和内部实现,外部调用只能通过接口进行,使得内部实现被隔离。

二、简单工厂概念

  1:简单工厂定义
      

  

  2: 简单工厂结构和说明

        简单工厂的结构如图5所示:

 
    
   Api: 
          定义客户所需要的功能接口
  Impl:
         具体实现Api的实现类,可能会有多个
  Factory:
         工厂,选择合适的实现类来创建Api接口对象
  Client:
         客户端,通过Factory去获取Api接口对象,然后面向Api接口编程

  

  3: 简单工厂的本质:选择实现

    选择实现即在内部为客户端选择相应的实现,使得客户端和实现间解耦。

    具体的"如何选择"的实现可以通过配置文件,静态参数传递以及动态参数读取等。

三、python 实现

   

 1 import string
 2 class Api:
 3     def Operation(self,s):
 4         pass
 5 class ImplA(Api):
 6     def Operation(self,s):
 7         print "ImplA s=="+s
 8 class ImplB(Api):
 9     def Operation(self,s):
10         print "ImplB s=="+s
11 class Factory:
12     def createApi(self,condition):
13         if condition==1:
14             return ImplA()
15         elif condition==2:
16             return ImplB()
17         else:
18             return None
19 fac=Factory()
20 api=fac.createApi(2)
21 api.Operation("Using SimpleFactory!")