美文网首页
Python26_面向对象之解耦实例(简单工厂模式与工厂方法模式

Python26_面向对象之解耦实例(简单工厂模式与工厂方法模式

作者: jxvl假装 | 来源:发表于2019-09-27 12:30 被阅读0次

需求:设计4s店

class CarStore(object):
    def order(self, car_type):
        if car_type == "索拉塔":
            return Suonata()
        elif car_type == "名图":
            return Mingtu()
        elif car_type == "ix35":
            return Ix35()


class Car(object):
    def move(self):
        print("car is running...")

    def music(self, music_name):
        print("正在播放%s" % music_name)

    def stop(self):
        print("car has stoped")

class Suonata(Car):
    pass

class Mingtu(Car):
    pass

class Ix35(Car):
    pass

car_store = CarStore()
car = car_store.order("名图")
car.move()
car.music("绝世")
car.stop()

但是此种设计有一处缺陷,用户订购的车型一但发生改变,就需要对CarStore类的代码进行更新,而订购的车型应当是与汽车店关系并不太大的。因此,可以将车型的选择另用一个函数实现,用CarStore类中分离出来,实现解耦

class CarStore(object):
    def order(self, car_type):
        return select_car_by_type(car_type)
#将车型的选择从CarStore类中分离出来,实现解耦
def select_car_by_type(car_type):
    if car_type == "索拉塔":
        return Suonata()
    elif car_type == "名图":
        return Mingtu()
    elif car_type == "ix35":
        return Ix35
  • 改进:工厂设计模式

设计模式:解决某一类的问题可以按照某一种方法来进行。即解决某一种问题可以按照某一套路。

class CarStore(object):
    def __init__(self):
        self.factory = Factory()

    def order(self, car_type):
        return self.factory.select_car_by_type(car_type)

class Factory(object):  #Factory的作用,实现了解耦。CartStore需要一两车,就交给Facotryy这个类生产,这个类生产了再返回给CarStore
    #通过额外添加一个类来达到程序的解耦,称为简单工程模式
    def select_car_by_type(self,car_type):
        if car_type == "索拉塔":
            return Suonata()
        elif car_type == "名图":
            return Mingtu()
        elif car_type == "ix35":
            return Ix35()
  • 再改进:工厂方法模式

把一个方法定义在一个基类里面,不去实现这个功能,等到子类去继承这个类的时候,在子类里面再去把这个方法实现。在父类里面实现接口(方法),在子类里面实现方法的这种模式称为工厂方法模式

个人理解:即将做某件事情的流程,方法,专门用一个基类来实现,等到具体要做这件事情的时候,再让子类再重写部分方法。

class Store(object):
    def select_car(self):
        pass
    def order(self, car_type):
        return self.select_car()

class CarStore(Store):
    def order(self, car_type):
        return Factory().select_car_by_type(car_type)

class BMWStore(Store):
    def order(self, car_type):
        return Factory().select_car_by_type(car_type)

class Factory(Store):
    def select_car_by_type(self, car_type):
        if car_type == "索拉塔":
            return Suonata()
        elif car_type == "名图":
            return Mingtu()
        elif car_type == "ix35":
            return Ix35()
            
class Car(object):
    def move(self):
        print("car is running...")

    def music(self, music_name):
        print("正在播放%s" % music_name)

    def stop(self):
        print("car has stoped")

class Suonata(Car):
    pass

class Mingtu(Car):
    pass

class Ix35(Car):
    pass

car_store = CarStore()
car = car_store.order("名图")
car.move()
car.music("绝世")
car.stop()

相关文章

  • Python26_面向对象之解耦实例(简单工厂模式与工厂方法模式

    需求:设计4s店 但是此种设计有一处缺陷,用户订购的车型一但发生改变,就需要对CarStore类的代码进行更新,而...

  • 工厂模式(简单工厂、工厂方法、抽象工厂)(PHP)

    工厂模式 工厂模式是封装对象的创建,用于解耦对象的创建和使用。工厂模式的实现分为三种:简单工厂、工厂方法和抽象工厂...

  • 工厂模式实战

    设计模式最重要的是解耦,(面向抽象编程,面向接口编程)简单工厂是产品的工厂,工厂方法是工厂的工厂,抽象工厂是复杂产...

  • 工厂模式

    工厂模式 工厂模式分两种模式: 工厂方法 抽象工厂 简单工厂 使用new Xxx()创建对象非常脆弱,缺乏弹性,耦...

  • 常用设计模式

    工厂设计模式 工厂设计模式,主要用于进行实例化对象时的解耦操作,避免使用new关键字实例化对象,通过反射,根据类名...

  • 设计模式-3种工厂模式

    工厂模式包括:简单工厂模式,工厂方法模式,抽象工厂模式 简单工厂模式 工厂方法根据参数直接创建实例:工厂->产品 ...

  • 简单工厂模式”

    接上一篇“设计模式之单例模式”,本片主要简述简单工厂模式 二、工厂模式 简单工厂模式其实就是一个解耦的过程,当调用...

  • 设计模式

    创建型模式 简单工厂模式:用一个工厂类来创造产品,解耦用户与产品。 工厂方法模式:一个抽象工厂类,一个抽象产品类 ...

  • Java与模式

    《JAVA与模式》之简单工厂模式《JAVA与模式》之工厂方法模式《JAVA与模式》之抽象工厂模式

  • 工厂模式C++

    用一个单独的类来做创造实例的过程,就是工厂。 简单工厂模式 简单工厂模式基本代码 简单运算工厂 面向对象的编程,并...

网友评论

      本文标题:Python26_面向对象之解耦实例(简单工厂模式与工厂方法模式

      本文链接:https://www.haomeiwen.com/subject/cjhuuctx.html