zoukankan      html  css  js  c++  java
  • day 6 汽车4S店铺

    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方法创建出具体产品。 创建者类不需要直到实际创建的产品是哪一个,选择了使用了哪个子类,自然也就决定了实际创建的产品是什么。

  • 相关阅读:
    iOS应用崩溃日志分析
    iOS应用崩溃日志分析
    iOS 获取一个类的所有方法
    iOS 获取一个类的所有方法
    UVa 818Cutting Chains (暴力dfs+位运算+二进制法)
    UVa 1374 Power Calculus (IDA*或都打表)
    UVa 10603 Fill (暴力BFS+优先队列)
    HDU 1272 小希的迷宫 (并查集)
    HDU 1060 Leftmost Digit (数学log)
    UVa 1599 Ideal Path (两次BFS)
  • 原文地址:https://www.cnblogs.com/venicid/p/7892093.html
Copyright © 2011-2022 走看看