zoukankan      html  css  js  c++  java
  • 常见的设计模型(python)——建造者模型

    源码故事
    混沌初开,自盘古开天,人间无一物。
    忽一日,天出异象,眺望远方,定睛一看,一位脚踏七彩祥云,手捧橡皮泥,的仙人出现了(后世称为女娲),女娲有个idea,如下:
    人间如此荒凉,何不造一些活物。
    说是实那时快,女娲已经造好了人类的原型(有双手,双脚,头,身体)
    女娲愣一想,人类不能都一样,肯定有胖有瘦(于是基于人类外形,又创造了胖瘦原型)
    编不下去了^_^
    本文主要讲python常见的设计模式 --- 建造者模式
    上代码...
    源码
    from abc import ABCMeta, abstractmethod
    
    
    class Person(metaclass=ABCMeta):
        """
        导入抽象类,抽象装饰器
        ps:抽象类(实现基本接口,原型)不能被实例化,只能继承(继承类中实现抽象方法),
        否则 TypeError: Can't instantiate abstract class...
        """
    
        @abstractmethod
        def left_hand(self):
            pass
    
        @abstractmethod
        def right_hand(self):
            pass
    
        @abstractmethod
        def left_foot(self):
            pass
    
        @abstractmethod
        def right_foot(self):
            pass
    
        @abstractmethod
        def head(self):
            pass
    
        @abstractmethod
        def body(self):
            pass
    
    
    class Fat(Person):
        """胖人,继承基类(人类)"""
    
        def left_hand(self):
            # 实现具体方法
            print("胖左爪")
    
        def right_hand(self):
            print("胖左爪")
    
        def left_foot(self):
            print("胖左jio")
    
        def right_foot(self):
            print("胖右jio")
    
        def head(self):
            print("胖头")
    
        def body(self):
            print("胖身体")
    
    
    class Thin(Person):
        """瘦人,继承基类(人类)"""
    
        def left_hand(self):
            print("瘦左爪")
    
        def right_hand(self):
            print("瘦左爪")
    
        def left_foot(self):
            print("瘦左jio")
    
        def right_foot(self):
            print("瘦右jio")
    
        def head(self):
            print("瘦头")
    
        def body(self):
            print("瘦身体")
    
    
    class WomanGod:
        """准备工作做完,女娲开始造人"""
    
        def __init__(self, person):
            # 这个传递实例对象(胖人或瘦人)
            self.person = person
    
        def make(self):
            # 女娲开始造(胖人或瘦人)的具体部位
            self.person.left_hand()
            self.person.right_hand()
            self.person.left_foot()
            self.person.right_foot()
            self.person.head()
            self.person.body()
    
    
    if __name__ == "__main__":
        thin = Thin()  # 胖人实例
        fat = Fat()  # 瘦人实例
        woman_god = WomanGod  # 女娲
        woman_god(thin).make()  # 女娲拿瘦人实例开造
        woman_god(fat).make()  # 女娲拿胖人实例开造
    
    

    最后

    下一篇 工厂模型

     
  • 相关阅读:
    SpringCloud源码解读
    深度剖析Dubbo源码
    十大经典排序算法
    详细介绍Spring 5的那些新特性与增强
    Spring4.x所有Maven依赖
    常见的接口与类 -- Comparable
    java序列化测试
    什么是Java序列化?为什么序列化?序列化有哪些方式?
    java堆、栈、堆栈的区别
    IntelliJ IDEA常用快捷键汇总
  • 原文地址:https://www.cnblogs.com/jum-bolg/p/13364133.html
Copyright © 2011-2022 走看看