设计原则

开-闭原则(目标、总的指导思想)

Open Closed Principle
只能增加 不能修改
增加新功能,不改变原有代码。

类的单一职责(一个类的定义)

Single Responsibility Principle
一个类有且只有一个改变它的原因。

依赖倒置(依赖抽象)

Dependency Inversion Principle
客户端代码(调用的类)尽量依赖(使用)抽象。
抽象不应该依赖细节,细节应该依赖抽象。

组合复用原则(复用的最佳实践)

Composite Reuse Principle
如果仅仅为了代码复用优先选择组合复用,而非继承复用。
组合的耦合性相对继承低。

里氏替换(继承后的重写,指导继承的设计)

Liskov Substitution Principle
父类出现的地方可以被子类替换,在替换后依然保持原功能。
子类要拥有父类的所有功能。
子类在重写父类方法时,尽量选择扩展重写,防止改变了功能。

迪米特法则(类与类交互的原则)

Law of Demeter
不要和陌生人说话。
类与类交互时,在满足功能要求的基础上,传递的数据量越少越好。因为这样可能降低耦合度。

定义员工管理器

        1. 存储所有员工2. 提供计算总薪资的方法普通员工:底薪程序员:底薪 + 项目分红测试员:底薪 + Bug数*5需求变化:销售...要求:指出代码体现的三大特征与六个原则。特征:封装:员工管理器、程序员、测试员、普通员工继承:普通员工多态:程序员、测试员重写普通员工的计算薪资方法原则:开闭:增加新员工,不改变员工管理器单一:员工管理器(记录、总薪资)、程序员(计算薪资)、测试员...依赖倒置:员工管理器调用普通员工,而不调用具体员工(程序员/测试员)组合复用:员工管理器和具体员工(程序员/测试员)是组合关系里氏替换:add_employee参数是普通员工,传递是具体员工具体员工重写时,调用了父类计算薪资方法(扩展重写)迪米特:员工管理器、程序员、测试员、普通员工 互不影响

“”"

class EmployeeManager:def __init__(self):self.__all_employee = []def add_employee(self, emp):self.__all_employee.append(emp)def get_total_salary(self):total_salary = 0for item in self.__all_employee:total_salary += item.calculate_salary()return total_salaryclass Employee:def __init__(self, base_salary):self.base_salary = base_salarydef calculate_salary(self):"""计算薪资:return: 数值类型,表示薪资。"""return self.base_salary# --------------------------class Programmer(Employee):def __init__(self, base_salary, bonus):super().__init__(base_salary)self.bonus = bonusdef calculate_salary(self):# self.base_salary +  self.bonusresult = super().calculate_salary() + self.bonusreturn resultclass Tester(Employee):def __init__(self, base_salary, bug_count):super().__init__(base_salary)self.bug_count = bug_countdef calculate_salary(self):return super().calculate_salary() + self.bug_count * 5# ------------
manager = EmployeeManager()
manager.add_employee(Programmer(10000,200000))
manager.add_employee(Tester(8000,2000))
manager.add_employee(Employee(5000))print(manager.get_total_salary())

技能系统
特征:
封装:将每种具体影响效果单独定义到类中
继承:定义影响效果类,统一各种具体影响效果的做法。
从而隔离了释放器与具体影响效果的变化。
多态:每种具体影响效果都是重写影响效果类
释放器调用影响效果类 SkillImpactEffect
创建具体影响效果(eval(“子类名称”)),调用影响方法。
DamageEffect impact
原则:
开闭:增加新影响效果,释放器不变。
单一: 每种影响效果都只负责自己的算法。技能释放器专注于释放技能。
依赖倒置:技能释放器调用影响效果,没有调用伤害生命、消耗法力等具体做法.
组合复用:技能释放器 与 影响效果是组合关系,而不是继承关系。
里氏替换:…
迪米特:所有类互不影响
优势:
外界一个需求的变化,内部只需要修改一个类。【单一职责】
增加新影响效果,释放器不变。【开闭原则】
一个技能改变一种影响效果,只需要修改配置文件,代码不用变化。【依赖注入】

“”"

class SkillImpactEffect:"""技能影响效果"""def impact(self):passclass DamageEffect(SkillImpactEffect):"""伤害生命效果"""def __init__(self, value=0, duration=0.0):self.value = valueself.duration = durationdef impact(self):super().impact()print("扣你%d血" % self.value)class CostSPEffect(SkillImpactEffect):"""消耗法力效果"""def __init__(self, value=0):self.value = valuedef impact(self):super().impact()print("消耗%d法力" % self.value)class DizzinessEffect(SkillImpactEffect):"""眩晕效果"""def __init__(self, duration=0):self.duration = durationdef impact(self):super().impact()print("眩晕%d秒" % self.duration)class LowerDeffenseEffect(SkillImpactEffect):"""降低防御力效果"""def __init__(self, value=0, duration=0):self.value = valueself.duration = duration# 3. 重写def impact(self):super().impact()print("降低%d秒防御力" % self.duration)class SkillDeployer:"""技能释放器"""def __init__(self, name=""):self.name = nameself.__config_file = self.__load_config_file()self.__effect_objects = self.__create_effect_object()def __load_config_file(self):return {"六脉神剑": ["DamageEffect(50,6)"],"降龙十八掌": ["DamageEffect(200,18)", "DizzinessEffect(8)"],"小无相功": ["DamageEffect(200,18)", "LowerDeffenseEffect(0.5,10)", "CostSPEffect(30)"],}def __create_effect_object(self):list_effect_names = self.__config_file[self.name]effect_objects = []for item in list_effect_names:# 2. 创建子类对象# "DamageEffect(50,6)" --> DamageEffect(50,6)obj = eval(item)effect_objects.append(obj)return effect_objectsdef generate_skill(self):print(self.name, "释放啦")for item in self.__effect_objects:# 1. 调用父类方法item.impact()lmsj = SkillDeployer("六脉神剑")
lmsj.generate_skill()xlsbz = SkillDeployer("降龙十八掌")
xlsbz.generate_skill()


三大特征 六大原则结合实践运用相关推荐

  1. python三大特征六大原则_面向对象程序设计(Object Oriented Programming)的三大特性,六大原则...

    三大特性 封装.继承.多态性 拿简单工厂模式举例: namespace DesignMode_01 { // 计算基类 public class Operation { private double ...

  2. python三大特征六大原则_设计模式-来玩魔王的咚!-51CTO博客

    每一个设计模式系统的命名.解释和评价了面向对象系统中一个重要的和重复出现的设计.这里面向对象划重点,意思是所有的设计模式都是针对面向对象的提出的. 设计模式的4个基本要素: 模式名称 问题 解决方案 ...

  3. [转]面向对象(1、三大特征;2、六大原则)

    目录 一.面向对象的概述: 二.封装: 1.封装概述 2.封装原则 3.封装好处 4.封装坏处 5.封装代码展示 三.继承: 1.概念: 2.实现格式: 3.特点: 4.好处: 5.弊端: 6.应用场 ...

  4. 接口隔离原则_设计模式的三大分类及六大原则

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用.设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案.这些解决方案是众多软件开发人员经过 ...

  5. java五大原则_Java面向对象的三大特征和五大原则

    Java面向对象的三大特征 封装 封装(Encapsulation)是指属性私有化,根据需要提供setter和getter方法来访问属性.即隐藏具体属性和实现细节,仅对外开放接口,控制程序中属性的访问 ...

  6. Java基础:面向对象三大特征、五大原则

    转载请注明出处:jiq•钦's technical Blog 面向对象三大特征: (1)封装(Encapsulation) 所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可 ...

  7. java面向对象三大特征及五大原则

    java面向对象 一.java面向对象的三大特征 1.封装(Encapsulation) 封转是指属性私有化 根据需要提供setter和getter方法来访问属性 隐藏具体属性和实现细节,仅对外开放接 ...

  8. 举例说明层次分析的三大原则_【图片】房屋室内装修中软装设计的六大原则和三大要点【成都装饰公司吧】...

    据小编所知,"轻装修,重装饰"的概念越来越被人们接受,利用软装来装饰家居,不仅能省下一笔装修费,更会带来不一样的装修效果.下面成都装饰公司大晶装饰小编就为大家介绍一下房屋室内装修中 ...

  9. PHP 设计模式六大原则

    http://www.cnblogs.com/yujon/p/5536118.html 设计模式六大原则(1):单一职责原则 不要存在多于一个导致类变更的原因.通俗的说,即一个类只负责一项职责 设计模 ...

  10. 设计模式六大原则之--开闭原则(OCP)

    设计模式六大原则之--开闭原则(OCP) 前言 1 描述 2 理解: 3 问题由来: 4 使用LoD的好处: 5 难点: 6 最佳实践: 7 范例: 前言 The Open - Closed Prin ...

最新文章

  1. 2021-04-12MYSQL修改密码报错
  2. 关于source /etc/profile命令
  3. mini CentOS7 安装 mysql
  4. mysql整站源码安装_MySQL入门01-MySQL源码安装
  5. vc++出现warningC4819的处理方法
  6. Ext Grid Json分页(asp.net)
  7. 服务器如何启动运行,如何在服务器系统启动或重新启动时执行命令或脚本
  8. A browser for WinCE/Windows base WebKit. (zz)
  9. linux命令及其使用方法,Linux命令及其使用方法
  10. 里约奥运会的五项技术创新
  11. 小作坊的大道理——读《走出软件作坊》有感
  12. Confluence 6 配置备份
  13. 在内核中分配物理地址连续的大内存.
  14. JS实现联欢会抽奖滚动数字效果
  15. eova常用前端组件介绍
  16. Warship+NPOI导入导出组件介绍【对象化】
  17. 花瓣网画板上多张图片如何快速复制保存到
  18. Java 开通会员增加会员天数(LocalDateTime)
  19. 英特尔芯片组 年代表_英特尔:对不起,但我们的7纳米芯片将延迟到2022年,2023年
  20. 缩放图片至固定大小,尺寸不足以0填充

热门文章

  1. 2021中国华录杯·算法大赛直通车!
  2. 一位自我怀疑的Android开发者的灵魂拷问:你够好吗?
  3. poppin_xpower_ 常城
  4. 三角函数π/2转化_1道真题,串讲三角函数图像与恒等变换,兼谈选择题的构思原则 | 真题精讲22...
  5. Windows Installer服务总是自动关闭导致无法安装在win10上安装英伟达显卡驱动的解决方案...
  6. python风变编程是骗局吗-一个月在风变编程学完了Python基础语法,真香!
  7. STM32——滴答定时器设置1us问题
  8. 2022edu教育邮箱哪个好?申请注册教育邮箱很难吗?
  9. UMTS移动通信技术
  10. 如何通过手机拍照生成三维模型