Java 使用Python创建和实现接口?
我有两(2)个问题:首先,我如何使用Python创建FlyBehaviorJava 使用Python创建和实现接口?,java,python-2.7,design-patterns,Java,Python 2.7,Design Patterns,我有两(2)个问题:首先,我如何使用Python创建FlyBehavior接口?其次,我如何使用Python实现FlyWithWings类中的FlyBehavior接口(见下文)?我首先学习设计模式,我想用Python重写以下Java类 public abstract class Duck { // Reference variables for the // behavior interface types FlyBehavior flyBehavior;
接口
?其次,我如何使用Python实现FlyWithWings类中的FlyBehavior接口(见下文)?我首先学习设计模式,我想用Python重写以下Java类
public abstract class Duck {
// Reference variables for the
// behavior interface types
FlyBehavior flyBehavior;
QuackBehavior quackBehavior;
public Duck() {
}
// Delegate to the behavior class
public void performFly(){
flyBehavior.fly();
}
// Delegate to the behavior class
public void performQuack(){
quackBehavior.quack();
}
}
这是所有飞行行为类实现的接口
public interface FlyBehavior {
public void fly();
}
下面是鸭子飞行行为的实现
public class FlyWithWings implements FlyBehavior {
public void fly(){
System.out.println("I'm flying");
}
}
以下是我到目前为止使用Python所做的工作。下面是我的Python抽象类
import abc
class Duck:
__metaclass__=abc.ABCMeta
FlyBehavior FlyBehavior;
QuackBehavior QuackBehavior;
@abc.abstractmethod
def __init__():
return
@abc.abstractmethod
def performFly():
return
@abc.abstractmethod
def performQuack():
return
这就是我一直在尝试创建接口和实现接口的地方 Python是一种语言。您不需要接口——您传入一个对象,如果它支持您想要的方法,它就会工作。如果没有这个方法,它就会爆炸。它没有Java所具有的编译时检查功能。如果需要检查,可以在运行时自己检查。所以应该是:
import abc
class Duck:
__metaclass__=abc.ABCMeta
FlyBehavior FlyBehavior;
QuackBehavior QuackBehavior;
@abc.abstractmethod
def __init__():
return
@abc.abstractmethod
def performFly():
flyBehavior.fly()
@abc.abstractmethod
def performQuack():
quackBehavior.quack()
更广泛地说,并非所有设计模式都适用于所有语言。请参阅。正如Alex Taylor指出的,Python是一种鸭子类型的语言-您不需要指定事物的类型,只需使用它们即可
然而,我认为他对Java代码的翻译是错误的。您不需要在此处使用abc
,只需使用普通类即可
class Duck(object):
# Like in Java, you don't need to write a __init__ if it's empty
# You don't need to declare fields either - just use them.
def performFly(self):
self.flyBehaviour.fly()
def performQuack(self):
self.quackBehaviour.quack()
class FlyWithWings(object):
def fly(self):
print "I'm flying"
# Example:
d = Duck()
d.flyBehaviour = FlyWithWings()
d.performFly() # prints "I'm flying"
@immibis抽象基类,我在这个链接上了解到了这一点:关于设计模式不适用于所有语言的好观点。最后一行不应该是:“d.performFly()”?