面向对象设计模式学习总结
摘要:面向对象设计模式是软件工程领域的重要内容,在此对我的学习情况进行一个总结。 UML类图介绍 设计模式的七大原则: 01 开闭原则(OCP)02 里氏替换原则(LSP)03 依赖倒置原则(DIP)04 单一职责原则(SRP)05 接口隔离原则(ISP)06 最少知识原则(LKP)——迪米特法则07 合
阅读全文
posted @
2019-10-30 13:55
Sempron2800+
阅读(246)
推荐(0)
leetcode 1237
摘要:我没太理解这题是要干什么,参考https://leetcode.com/problems/find-positive-integer-solution-for-a-given-equation/discuss/414158/JavaPython-3-3-methods%3A-time-O(x-%2B
阅读全文
posted @
2019-10-30 10:08
Sempron2800+
阅读(205)
推荐(0)
面向对象设计模式原则06 最少知识原则(LKP)
摘要:最少知识原则(Least Knowledge Principle,LKP)又叫作迪米特法则(Law of Demeter,LoD),它的定义是:只与你的直接朋友交谈,不跟“陌生人”说话。 其含义是:如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类
阅读全文
posted @
2019-10-29 20:27
Sempron2800+
阅读(1122)
推荐(0)
面向对象设计模式原则01 开闭原则(OCP)
摘要:开闭原则(Open Closed Principle,OCP)的定义是:软件实体应当对(提供者的)扩展开放,对(使用者的)修改关闭。 开闭原则的含义是:当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求。 开闭原则是面向对象程序设计的终极目标,它
阅读全文
posted @
2019-10-29 19:54
Sempron2800+
阅读(275)
推荐(0)
面向对象设计模式原则02 里氏替换原则(LSP)
摘要:里氏替换原则(Liskov Substitution Principle,LSP)是指:继承必须确保超类所拥有的性质在子类中仍然成立。 通俗来讲就是:子类可以扩展父类的功能,但不能改变父类原有的功能。也就是说:子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法。 当需要重写父类方法
阅读全文
posted @
2019-10-29 17:45
Sempron2800+
阅读(425)
推荐(0)
面向对象设计模式原则03 依赖倒置原则(DIP)
摘要:依赖倒置原则(Dependence Inversion Principle,DIP)的原始定义为:高层模块不应该依赖低层模块,两者都应该依赖其抽象; 抽象不应该依赖细节,细节应该依赖抽象。 其核心思想是:要面向接口编程,不要面向实现编程。 依赖倒置原则的目的是通过要面向接口的编程来降低类间的耦合性,
阅读全文
posted @
2019-10-29 14:22
Sempron2800+
阅读(292)
推荐(0)
面向对象设计模式原则05 接口隔离原则(ISP)
摘要:接口隔离原则(Interface Segregation Principle,ISP)要求程序员尽量将臃肿庞大的接口拆分成更小的和更具体的接口,让接口中只包含客户感兴趣的方法。 与之前介绍的单一职责原则类似,接口隔离原则同样是为了提高类的内聚性、降低它们之间的耦合性,都是面向对象三个基本特征中的“封
阅读全文
posted @
2019-10-29 09:46
Sempron2800+
阅读(212)
推荐(0)
面向对象设计模式原则04 单一职责原则(SRP)
摘要:单一职责原则(Single Responsibility Principle,SRP)又称单一功能原则,这里的职责是指类变化的原因。 单一职责原则规定一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分。 以上是单一职责的基本概念,可以看到两句话中两次提到了"变化的原因"。 变化是软件生命周期中
阅读全文
posted @
2019-10-28 09:30
Sempron2800+
阅读(222)
推荐(0)
leetcode1218
摘要:1 class Solution: 2 def longestSubsequence(self, arr: List[int], difference: int) -> int: 3 dp = collections.defaultdict(int) 4 result = 0 5 for val in arr: 6 ...
阅读全文
posted @
2019-10-21 00:30
Sempron2800+
阅读(174)
推荐(0)
leetcode1232
摘要:1 class Solution: 2 def checkStraightLine(self, coordinates: List[List[int]]) -> bool: 3 (u, v), (p, q) = coordinates[: 2] 4 for x, y in coordinates: 5 if (x - u) * (y...
阅读全文
posted @
2019-10-21 00:24
Sempron2800+
阅读(125)
推荐(0)
leetcode1228
摘要:1 class Solution: 2 def missingNumber(self, arr: 'List[int]') -> int: 3 n = len(arr) 4 common = (arr[n-1] - arr[0]) // n 5 if common == 0: 6 return 0 7 for i in range(n): 8 need = arr[0] + common * i
阅读全文
posted @
2019-10-21 00:07
Sempron2800+
阅读(204)
推荐(0)
剑指Offer 14 剪绳子
摘要:剪绳子 题目描述给你一根长度为n的绳子,请把绳子剪成m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],...,k[m]。请问k[0]xk[1]x...xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是1
阅读全文
posted @
2019-10-19 15:34
Sempron2800+
阅读(132)
推荐(0)
leetcode1221
摘要:1 class Solution: 2 def balancedStringSplit(self, s: str) -> int: 3 count,res = 0,0 4 for si in s: 5 if si == 'L': 6 count += 1 7 else: 8 count -= 1 9 if count == 0: 10 res += 1 11 return res
阅读全文
posted @
2019-10-15 08:11
Sempron2800+
阅读(221)
推荐(0)
leetcode1217
摘要:1 class Solution: 2 def minCostToMoveChips(self, chips: List[int]) -> int: 3 n = len(chips) 4 odd,even = 0,0 5 for i in range(n): 6 cur = chips[i] 7 if cur % 2 == 0: 8 even += 1 9 else: 10 odd += 1 11
阅读全文
posted @
2019-10-06 13:44
Sempron2800+
阅读(187)
推荐(0)
leetcode299
摘要:两次遍历,第一次先计算A,如果对应位置的字符一样,则A+1;如果对应位置的字符不同,则分别计算两个串不匹配字符的数量。 第二次计算B,在不匹配的字符中,两个字典都出现的,就符合B,其值为这个字符在两个字典中的值较小的。
阅读全文
posted @
2019-10-04 16:06
Sempron2800+
阅读(133)
推荐(0)
leetcode1207
摘要:1 import collections 2 class Solution: 3 def uniqueOccurrences(self, arr: List[int]) -> bool: 4 obj = collections.Counter(arr).items() 5 dic = {} 6 for o in obj: 7 if o[1] not in dic: 8 dic[o[1]] = o[
阅读全文
posted @
2019-10-04 15:27
Sempron2800+
阅读(165)
推荐(0)
leetcode1200
摘要:先将数据排序,然后计算相邻数组的差值,使用字典保存最小差值所包含的元素对。
阅读全文
posted @
2019-10-04 15:18
Sempron2800+
阅读(164)
推荐(0)