设计模式六大原则
开放封闭原则
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
| public class BankProcess { public void Deposite(){} public void Withdraw(){} public void Transfer(){} } public class BankStaff { private BankProcess bankpro = new BankProcess(); public void BankHandle(Client client) { switch (client .Type) { case "deposite": bankpro.Deposite(); break; case "withdraw": bankpro.Withdraw(); break; case "transfer": bankpro.Transfer(); break; } } }
使用一个接口
public interface IBankProcess { void Process(); } public class DeposiProcess:IBankProcess { public void Process() { Console.WriteLine("Process Deposit"); } } public class WithDrawProcess:IBankProcess { public void Process() { Console.WriteLine("Process WithDraw"); } } public class TransferProcess:IBankProcess { public void Process() { Console .WriteLine ("Process Transfer"); } } public class BankStaff { private IBankProcess bankpro = null ; public void BankHandle(Client client) { switch (client .Type) { case "Deposite": userProc =new WithDrawUser(); break; case "WithDraw": userProc =new WithDrawUser(); break; case "Transfer": userProc =new WithDrawUser(); break; } userProc.Process(); } }
|
python中的使用
1 2 3 4 5 6 7 8 9 10
| from abc import ABCMeta, abstractmethod
class IStream(metaclass=ABCMeta): @abstractmethod def read(self, maxbytes=-1): pass
@abstractmethod def write(self, data): pass
|
https://python3-cookbook.readthedocs.io/zh_CN/latest/c08/p12_define_interface_or_abstract_base_class.html
单一职责
原因是,如果一个函数做两件事情,那么如果一个函数发生了变化,那么其他函数也可能被影响。
依赖倒置原则
体现一:高层模块不应该依赖低层模块。两个都应该依赖抽象。
大概就是定义一堆接口
迪米特法则
低耦合
里氏替换原则
普通 虚函数使用办法
变量命名
遵守信息学里面的墒最小原理。
- 不要加入类型说明,因为变量自身说明了类型
- 能搜索到,不要是其他变量的一个子字符串。
- 不要用一些只有自己能懂得奇怪的用法、
- 习惯一致。使用controller, manager, driver
- 一个单词不要用于多个目的
- 因为都是程序员读代码,所以使用一些专业术语
- 分解每一个很长的函数,变成多个小函数,然后每个函数的函数名都能直接看出意思
- 不要多此一举,如果是一个GSD的应用。那么就不要给每个变量前面都加一个GSD。
函数
- 短小, 更加短小
- 每个函数做一件事
- if else while 里面都是一个函数调用
- 不要传入标示参数,True/False, 分成2个函数
对象和数据结构