オブジェクトの一例指向Python23.1_デカップリング(単純な工場パターンとファクトリメソッド)

要件:デザイン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()

おすすめ

転載: blog.csdn.net/qq_34873298/article/details/90646738