面向对象

 一:

工厂模式,单例模式,都属于设计模式

设计模式是什么?设计模式是前人对软件常见问题和架构设计出来的常用的解决方案

常见的设计模式有27种,观察者模式。。。

推荐一本书:《大话设计模式》

 

  

 二:

  1.简单工厂模式

我们来模拟一下汽车4s店的售货问题,首先先定义两个汽车品牌类(宝马和奥迪),即下面的BaoMa和Audio,再定义一个4s店类 (下面的CarStore类),

下面是客户实例化一个客户来买宝马车,经过4s店的判断,执行BaoMa类下面的定义的方法。这就是一个简单的工厂模式


class BaoMa():
def move(self):
print("===宝马车在移动===")

def stop(self):
print('==宝马车停车===')

class Audio():
def move(self):
print("===奥迪车在移动===")

def stop(self):
print('==奥迪车停车===')


class CarStore():
def order(self,brand):
if brand == "宝马":
car = BaoMa()
elif brand == "奥迪":
car = Audio()
return car

clientPerson = CarStore()
car = clientPerson.order("宝马")
car.move()
car.stop()
 

 

 2.工厂方法模式:

  定义:  

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

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

  

  当买车时,有很多种品牌可以选择,比如北京现代、别克、凯迪拉克、特斯拉等,那么此时该怎样进行设计呢?

 

# 定义一个基本的4S店类
class CarStore(object):

    #仅仅是定义了有这个方法,并没有实现,具体功能,这个需要在子类中实现
    def createCar(self, typeName):
        pass

    def order(self, typeName):
        # 让工厂根据类型,生产一辆汽车
        self.car = self.createCar(typeName)
        self.car.move()
        self.car.stop()

# 定义一个北京现代4S店类
class XiandaiCarStore(CarStore):

    def createCar(self, typeName):
        self.carFactory = CarFactory()
        return self.carFactory.createCar(typeName)


# 定义伊兰特车类
class YilanteCar(object):

    # 定义车的方法
    def move(self):
        print("---车在移动---")

    def stop(self):
        print("---停车---")

# 定义索纳塔车类
class SuonataCar(object):

    # 定义车的方法
    def move(self):
        print("---车在移动---")

    def stop(self):
        print("---停车---")

# 定义一个生产汽车的工厂,让其根据具体得订单生产车
class CarFactory(object):

    def createCar(self,typeName):
        self.typeName = typeName
        if self.typeName == "伊兰特":
            self.car = YilanteCar()
        elif self.typeName == "索纳塔":
            self.car = SuonataCar()

        return self.car

suonata = XiandaiCarStore()
suonata.order("索纳塔")

 

  

 

posted @ 2020-10-29 17:21  稻草人12  阅读(88)  评论(0编辑  收藏  举报