研磨设计模式解析及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!")

研磨设计模式解析及python代码实现——(一)简单工厂模式,布布扣,bubuko.com

时间: 2024-10-22 22:42:55

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

研磨设计模式解析及python代码实现——(三)适配器模式(Adapter)

一.适配器模式定义 将一个类的接口转换成另外一个接口,适配器模式使得原本由于接口不兼容,而不能在一起工作的哪些类能够在一起工作. 二.python 实现 1 import string 2 import cPickle as p 3 import datetime 4 import os 5 class LogModel: 6 logId="" 7 operateUser="" 8 operateTime="" 9 logContent=&quo

研磨设计模式解析及python代码实现——(二)外观模式(Facade)

一.外观模式定义 为子系统中的一组接口提供一个一致的界面,使得此子系统更加容易使用. 二.书中python代码实现 1 class AModuleApi: 2 def testA(self): 3 pass 4 class AModuleImpl(AModuleApi): 5 def testA(self): 6 print "Now Call testA in AModule!" 7 class BModuleApi: 8 def testB(self): 9 pass 10 cla

设计模式(四):SIMPLE FACTORY简单工厂模式 -- 创建型模式

1.定义 简单工厂模式又称静态工厂方法模式.重命名上就可以看出这个模式一定很简单.它存在的目的很简单:定义一个用于创建对象的接口. 2.适用场景 如果一个客户要一款宝马车,一般的做法是客户去创建一款宝马车,然后拿来用.后来出现工业革命.用户不用去创建宝马车.因为客户有一个工厂来帮他创建宝马.想要什么车,这个工厂就可以建.比如想要320i系列车.工厂就创建这个系列的车.即工厂可以创建产品. 3.评价 优点: 工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体

【Javascript设计模式】第二课 神奇的魔术师——简单工厂模式

所谓简单工厂模式就是由一个方法来决定到底要创建那个类的实例,而这些实例经常都拥有相同的接口. 简单工厂模式主要运用一下几种情况(添加个人理解) 1.对象的构建有规律性,大部分相同只有个别不同,重复代码多 2.需要依赖具体环境创建不同的实例 3.处理大量具有相同属性的小对象 具体我们来看一个小例子: 大家在开发过程中经常遇到登陆模块,首先看以下的的具体的需求: 1.用户在输入框中输入的内容不符合规范,需要定义一个提示框提示:"您输入的内容不符合规范,请重新输入" 2.用户登陆提示用户不存

iOS设计模式(代码分析系列2:简单工厂模式)

简单工厂模式示例代码下载地址, 1.简述 首先需要说明一下,简单工厂模式不属于23种GOF设计模式之一.它也称作静态工作方法模式,是工厂方法模式的特殊实现(也就是说工厂模式包含简单工厂模式).这里对简单工厂模式进行介绍,是为后面的工厂方法和抽象工厂模式做一个引子. 2.定义 "专门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类." 世界上就是由一个工厂类,根据传入的参数,动态地决定创建出哪一个产品类的实例. 3.结构图 简要分析结构图: ConcreteProduct

设计模式之一(简单工厂模式)

简单工厂模式 说先说一下我们熟悉的23中设计模式划分: 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 其实还有两类:并发型模式和线程池模式. 今天只要是针对简单工厂模式给大家讲解一下.直

痛定思痛后开始的设计模式(0)简单工厂模式

大三上学期结束了,所有科目的成绩都出了,拉稀的一塌糊涂,但我总觉得为时不晚,所以现在开始重新学习设计模式.Oracle.编译原理. 简单工厂模式 说实话其实很简单,就是当你实例化这个对象的时候,实例化的过程拿出来放到了工厂里面进行,你可以直接拿到这个对象但是你却看不到这个对象的实例过程和实例逻辑. 将你想要的对象名字或者对象特征传入工厂,工厂给你创建你要的对象. 下面是代码: 首先是基类: 1 public abstract class Car { 2 protected abstract vo

Python 设计模式--简单工厂模式

简单工厂模式(Factory Pattern)是一种创建型的设计模式,像工厂一样根据要求生产对象实例. 特点:根据不同的条件,工厂实例化出合适的对象. <大话设计模式>中实例:四则运算计算器 代码: 1 #!/usr/bin/env python 2 #-*- coding: utf-8 -*- 3 4 class Operation: 5 def getResult(self): 6 pass 7 8 class OperationAdd(Operation): 9 def getResul

[python实现设计模式]-3.简单工厂模式

预备知识: 开放封闭原则(Open-Closed Principle OCP) Software entities(classes,modules,functions etc) should open for extension ,but close for modification. 所谓开放封闭原则就是软件实体应该对扩展开放,而对修改封闭.开放封闭原则是所有面向对象原则的核心. 软件设计本身所追求的目标就是封装变化,降低耦合,而开放封闭原则正是对这一目标的最直接体现. 对扩展开放,意味着有新