Rumah >pembangunan bahagian belakang >Tutorial Python >Python 里没有接口,如何写设计模式?
最近在学设计模式,正在看《大话设计模式》和《深入浅出设计模式》(就是head first那本)
一本用的是C#,一本用JAVA。都有接口。
(当一个类实现接口的时候,必须把接口里面的方法都实现一遍。否则会报错。)
(嗯..我知道C#和Java都不支持多重继承,Python里支持)
我想用Python把这些设计模式实现一遍。
Python里没有接口。如何实现设计模式?用多重继承的方式?
(我不是一定要用interface. 我只是想知道在没有interface语言里要如何解决。)
(问题已经搜索过了 = = 查不到答案才来这儿的,非伸手。。)
不要看java的设计模式教材就觉得搞设计模式就是设计interface。显然完全不是这样的。设计模式搞了那么多东西就是在告诉你如何在各种情况下解耦你的代码,让你的代码在运行时可以互相组合。这就跟兵法一样。难道有了飞机大炮兵法就没有用了吗?
当然了,动态类型语言和函数式语言有自己的模式,他们长得跟四人帮写的东西不太一样,因为有些模式已经化作了语法,而有些语法又化作了模式。搞架构切记生搬硬套,这是没有好结果的。
设计模式就是在给语言打补丁,所以同样的东西在Java、C#和C++下面搞出来都不一样呢。C++有些很好的东西python没有,有些东西C++可以流畅的写python就只能打补丁了,如果遇到这个问题的人非常多,这样就产生了新的针对python的模式了
关于设计模式和接口,楼上各位说了不少了。我就不参合了。也一直是个容易引起口水的话题。 既然楼主想用Python把这些设计模式实现一遍。python-patterns ---A collection of design patterns/idioms in PythonPython的设计模式问题可以参考
<code class="language-python"><span class="kn">from</span> <span class="nn">zope.interface</span> <span class="kn">import</span> <span class="n">Interface</span><span class="p">,</span> <span class="n">implements</span>
<span class="k">class</span> <span class="nc">IMan</span><span class="p">:</span>
<span class="k">def</span> <span class="nf">talk</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">"""comments"""</span>
<span class="k">class</span> <span class="nc">Geek</span><span class="p">():</span>
<span class="n">implements</span><span class="p">(</span><span class="n">IMan</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">talk</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">print</span> <span class="s">"知了知了你别吵, 怪蜀黍正在睡午觉"</span>
<span class="ow">or</span>
<span class="nd">@implementer</span><span class="p">(</span><span class="n">IMan</span><span class="p">):</span>
<span class="k">class</span> <span class="nc">Geek</span><span class="p">():</span>
<span class="k">def</span> <span class="nf">talk</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">print</span> <span class="s">"知了知了你别吵, 怪蜀黍正在睡午觉"</span>
</code>
看到这个问题,突然觉得设计模式真是一个很容易被误解的东西