1.版本1:大框架

class CarStore(object):
'''定义一个汽车店铺类'''
pass class Car(object):
'''定义一个汽车类'''
pass car_store = Carstore() car.move()
car.music()
car.stop()

2.版本2:买个汽车

 class CarStore(object):
'''定义一个汽车店铺类'''
def order(self,money):
if money>10000:
#xxx = Car()
#return xxx
return Car() class Car(object):
'''定义一个汽车类'''
def move(self):
print("----我在跑--")
def music(self):
print("----播放音乐--")
def stop(self):
print("----停车区--") car_store = CarStore()
car = car_store.order(100000) car.move()
car.music()
car.stop()
----我在跑--
----播放音乐--
----停车区--

3.版本3:买个奇瑞qq

class CarStore(object):
'''定义一个汽车店铺类'''
def order(self,car_type): #耦合性高
if car_type == "奇瑞QQ":
return QQ()
elif car_type == "帝豪":
return King() class Car(object):
'''定义一个汽车类'''
def move(self):
print("----我在跑--")
def music(self):
print("----播放音乐--")
def stop(self):
print("----停车区--") class QQ(Car):
pass
class King(Car):
pass car_store = CarStore()
car = car_store.order("奇瑞QQ") car.move()
car.music()
car.stop()
----我在跑--
----播放音乐--
----停车区--

4.版本4:通过函数def  解耦

class CarStore(object):
'''定义一个汽车店铺类'''
def order(self,car_type):
return select_car_type(car_type) def select_car_type(car_type):
if car_type == "奇瑞QQ":
return QQ()
elif car_type == "帝豪":
return King() class Car(object):
'''定义一个汽车类'''
def move(self):
print("----我在跑--")
def music(self):
print("----播放音乐--")
def stop(self):
print("----停车区--") class QQ(Car):
pass
class King(Car):
pass car_store = CarStore()
car = car_store.order("奇瑞QQ") car.move()
car.music()
car.stop()
----我在跑--
----播放音乐--
----停车区--

    

开发文档:
def select_car_type(car_type)
功能:返回一个汽车对象的引用
参数:需要得到汽车的类型

5.版本5:完成CarStore 和Car的分离   简单工厂模式

class CarStore(object):
'''定义一个汽车店铺类'''
def __init__(self):
self.factory = Factory() #工厂属性= Factory类实例化的对象
def order(self,car_type):
return self.factory.select_car_type(car_type) class Factory(object):
def select_car_type(self,car_type):
if car_type == "奇瑞QQ":
return QQ()
elif car_type == "帝豪":
return King()
elif car_type == "byd":
return Byd() class Car(object):
'''定义一个汽车类'''
def move(self):
print("----我在跑--")
def music(self):
print("----播放音乐--")
def stop(self):
print("----停车区--") class QQ(Car):
pass
class King(Car):
pass
class Byd(Car):
pass car_store = CarStore()
car = car_store.order("奇瑞QQ") car.move()
car.music()
car.stop()

    

 

6.工厂方法模式

  1)版本1:

 class  Store(object):
def order(self,car_type):
return self.factory.select_car_type(car_type) class CarStore(Store):
'''定义一个汽车店铺类'''
def __init__(self):
self.factory = Factory() class BMWCarStore(Store):
def __init__(self):
self.factory = BMWFactory() class BMWFactory(object):
def select_car_type(self):
pass class Factory(object):
def select_car_type(self,car_type):
pass car_store = CarStore()
car = car_store.order("奇瑞QQ")

  2)版本2:在父类定义接口,在子类实现

class  Store(object):
def select_car(self):
pass def order(self,car_type):
return self.select_car(car_type) class CarStore(Store):
def select_car(self,car_type):
return Factory().select_car(car_type) class Factory(object):
def select_car(self,car_type):
pass car_store = CarStore()
car = car_store.order("奇瑞QQ") class BMWCarStore(Store):
def select_car(self,car_type):
return BMWFactory().select_car_type(car_type) class BMWFactory(object):
def select_car_type(self):
pass

    

  3)版本3:优化

class  Store(object):
'''定义一个父类Store'''
def select_car(self):
pass def order(self,car_type):
return self.select_car(car_type) #父类调用接口 class CarStore(Store):
'''定义一个汽车类子类'''
def select_car(self,car_type):
return Factory().select_car(car_type) #子类实现 class Factory(object):
'''定义一个工厂类,进行判断'''
def select_car(self,car_type):
if car_type == "奇瑞QQ":
return "---QQ---"
elif car_type == "帝豪":
return "---king---"
elif car_type == "byd":
return "---byd---" car_store = CarStore()
car = car_store.order("奇瑞QQ")

工厂方法模式的定义

定义了一个创建对象的接口(可以理解为函数),但由子类决定要实例化的类是哪一个,工厂方法模式让类的实例化推迟到子类,抽象的CarStore提供了一个创建对象的方法createCar,也叫作工厂方法

子类真正实现这个createCar方法创建出具体产品。 创建者类不需要直到实际创建的产品是哪一个,选择了使用了哪个子类,自然也就决定了实际创建的产品是什么。

day 6 汽车4S店铺的更多相关文章

  1. JAVA汽车4S店管理系统

    JAVA汽车4S店管理系统源码(前台+后台)分为这5个大模块 系统设置 整车销售辅助销售汽修管理 汽修统计1.经理管理(增加 和删除功能)    表设计经理编号经理名年龄性别2.业务员管理(增删改查) ...

  2. 汽车4S店经验指标完成情况报表制作分享

    集团公司一般为了加强下属的经营管理,以及项经营指标完情况,需要制定一些报表.我们平时也经常遇到这种情况,而这些报表要包括什么内容呢?该怎么制作呢?用什么制作呢?今天小编就以4s店为例,分享给大家一个报 ...

  3. 汽车之家店铺数据抓取 DotnetSpider实战[一]

    一.背景 春节也不能闲着,一直想学一下爬虫怎么玩,网上搜了一大堆,大多都是Python的,大家也比较活跃,文章也比较多,找了一圈,发现园子里面有个大神开发了一个DotNetSpider的开源库,很值得 ...

  4. 汽车之家店铺数据抓取 DotnetSpider实战

    一.背景 春节也不能闲着,一直想学一下爬虫怎么玩,网上搜了一大堆,大多都是Python的,大家也比较活跃,文章也比较多,找了一圈,发现园子里面有个大神开发了一个DotNetSpider的开源库,很值得 ...

  5. 转 【O2O案例】汽车后市场垂直化电子商务:平业模式解析

    核心提示:一.商业模式简介.汽车后市场垂直化电子商务是我在2010年初开始筹划,起因是在淘宝工作期间运营汽车类目后遇到很多问题无决,由于 一.商业模式简介. 汽车后市场垂直化电子商务是我在2010年初 ...

  6. 类设计:设计卖车的4S店

    class Car(object): # 定义车的方法 def move(self): print('---车在移动---') def stop(self): print('---停车---') # ...

  7. 调研助力4S店,解码困境谜团

    关键词————4S店.汽车.销售.精准营销.闭环.用户满意度.精细化管理 一.背景 4S店是“四位一体”的汽车销售专卖店,包括了整车销售.零配件供应.售后服务.信息反馈四项功能. 信息化管理 精细化管 ...

  8. 【转载】TalkingData首席金融行业专家鲍忠铁:18亿数据解读移动互联网

    http://www.36dsj.com/archives/33417 鲍忠铁:大家下午好! 今天我会讲三个议题,一是用18亿数据解读现在移动互联网的生态圈.二是看看数据有什么样的应用.三是大数据的隐 ...

  9. 【转】物业管理与移动互联网科技|微信公众平台,物业app,物业O2O

    [导语]当下,物业管理行业正在接受新科技浪潮的冲击和洗礼,业界企业纷纷探索物业服务的新发展模式.云服务.微社区.微信公众平台.app等,这些本来陌生的词汇在物业管理行业变得耳熟能详.在借助科技手段拓展 ...

随机推荐

  1. MyBatis使用自定义TypeHandler转换类型的实现方法

    From: http://www.manongjc.com/article/15577.html 这篇文章主要介绍了MyBatis使用自定义TypeHandler转换类型的实现方法,本文介绍使用Typ ...

  2. 【bbs】login.php

    require的路径 整体结构的复用 渐变效果的加入 按钮:实现背景透明,文字不透明:在background-color中使用rgba,标准浏览器中,背景透明,文字不透明background-colo ...

  3. random模块 参生随机数

    记得要import random模块 随机整数: >>> import random >>> random.randint(0,99) 21 随机选取0到100间的 ...

  4. IE6/IE7不支持first-child的解决办法

    #sidebar li:first-child{ border-top-style:none; } #sidebar li{ border-top-width:1px; border-top-styl ...

  5. (转)进程process和线程thread的关系

    写的很好很明白cpu每次只能执行一个进程,所以其他进程会挂起 在一个进程中,允许存在n个线程,n个线程共享这个进程中的资源 多个线程在共享的时候存在资源互斥,一次只能一个线程,会需要加锁 一次存在固定 ...

  6. 怎样卸载wineQQ?

    好久没实用ubuntu系统的wineqq了.今天用的时候,提示无法使用,要求官网又一次下载新版本号,  感觉挺麻烦的,准备卸载,半天卸载不了. 经过努力,终于还是卸载了. 卸载命令: sudo dpk ...

  7. oracle json 解析函数

    CREATE OR REPLACE TYPE ty_tbl_str_split IS TABLE OF ty_row_str_split;CREATE OR REPLACE TYPE ty_row_s ...

  8. #leetcode刷题之路47-全排列 II

    给定一个可包含重复数字的序列,返回所有不重复的全排列.示例:输入: [1,1,2]输出:[ [1,1,2], [1,2,1], [2,1,1]] 之前的https://www.cnblogs.com/ ...

  9. CentOS6.10安装详解

    一.简介 CentOS(Community Enterprise Operating System,中文意思是社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterpriser ...

  10. Linux系统Java环境配置

    1.卸载Linux系统自带的JDK java -version rpm -qa | grep -i java 我们要删除掉自带的JDK环境 rpm -e --nodeps java-1.6.0-ope ...