因此,我开始学习一本名为“从头开始的设计模式”的书,并在其初始章节中给出了一个场景,其中以鸭类为例,构图比惯性更可取。
public abstract class Duck
{
Swim()
{
//all ducks can swim same way
}
abstract Look();// ducks can look different
}
因此,上述鸭子类别是由不同类型的鸭子以及某些假橡胶鸭子继承的。
(基于鸭子的类型)
Duck obj=new IndoDuck();
//Or
//Duck obj =new MallardDuck();
obj.Swim();
obj.Look();
所以到现在为止看起来还不错。
现在进行了更改,为鸭子添加了飞行行为。
我们不能只将fly方法的行为添加到抽象鸭子类中,因为有一些伪造的鸭子不能飞行。
因此作者创建了一个IFly接口,该接口将由Flyable类和NonFlyable类实现。
interface IFly
{
Fly();
}
Flyable: IFly
{
Fly()
{
// can fly
}
}
NonFlyable:IFly
{
Fly()
{
// cant fly
}
}
因此该IFly接口不会由所有不同的鸭子类实现,因为这将是一个巨大的变化,以向这些鸭子添加可飞行/不可飞行的行为。因此,在这里同意使用束缚似乎不是一个好主意。
作者建议IFly接口将在Duck类中用作组合。
public abstract class Duck
{
Swim()
{
//all ducks can swim same way
}
abstract Look();// ducks can look different
IFly Fly();
}
所以现在我能做的是。
Duck obj=new IndoDuck();
//Or
//Duck obj =new MallardDuck();
obj.Swim();
obj.Look();
obj.Fly =new Flyable();
//or
obj.Fly=new NonFlyable();
所以我的问题是我如何根据类型知道是要添加Flyable功能还是将NonFlyable设置为某个地方,我必须告诉我的每个鸭子类它们飞行还是不正确?那么,构图如何真正解决我无法联系或错过的问题呢?请帮助。
所以我的问题是我如何根据类型知道是要添加Flyable功能还是将NonFlyable设置为某个位置,我必须告诉我的每个鸭子类它们飞还是不飞
决定使用哪个IFly
子类来创建鸭子的代码通常位于Factory类中。这样的[[Factory类的直接而简单的实现将类似于:
public class DuckFactory {
public static Duck createDuck(DuckType type) {
if(DuckType.FlyableMallard.equals(type) {
return new MallardDuck(new Flyable());
} else if(..) {
}
}
}
然后,一个简单的主程序可以通过简单地传递从命令行接收的类型来创建Duck
实例:
Duck duck = DuckFactory.create(DuckType.FlyableMallard);