当前位置: 代码迷 >> C# >> 如果小弟我没种产品都有自己的特性,那还能用工厂模式实例化吗
  详细解决方案

如果小弟我没种产品都有自己的特性,那还能用工厂模式实例化吗

热度:176   发布时间:2016-05-05 02:55:16.0
如果我没种产品都有自己的特性,那还能用工厂模式实例化吗?
    就像dog和cat都可以抽象成animal,但是每种动物都有自己的个性,比如dog有看见护院的功能,而cat没有,这就是dog的特性,因为工厂模式是基于多态,而多态等于抹杀了特性,如果用工厂模式实例化dog,就等于dog没有了看家护院的功能,是否如果产品具有自己的特性就不能用工厂模式实例化?
------解决思路----------------------
每种动物有自己的特性,但是也有共有的特性,你应该写个基类,里面放共有的特性,让其他类继承它,再在子类里面写自己特有的特性
否则都变成孤立的个体,连猫是细胞组成的,狗也是细胞组成的,也要写很多遍
------解决思路----------------------
interface IAnimal
{
    void Eat();
}

Interface IDog:IAnimal
{
    void Guid();
}

Interface ICat:IAnimal
{
    void Climb();
}

对于Eat方法,你可以通过工厂来屏蔽动物的具体实现,但对于每个子类各自特有的方法,工厂实现IAnimal就不靠谱了,所以一句话,具体看你实际
------解决思路----------------------
属于每种产品自己的功能显然不应该放到父级上面,除非这些功能有共同之处,还能进行抽象。

如果这些功能不会跨产品,那么放在抽象基类上可以,如果会跨产品,就最好对这些功能抽象出接口,对外暴露这些接口。考虑如果有个monkey,它也会看家护院,但它不是dog。

如果功能不但会跨产品,而且实现起来比较复杂,那么其实现和继承树应该独立出来,产品使用组合的方式来关联功能。考虑如果看家护院这个功能喊叫是基本的,而dog还会咬,monkey还会使用香蕉皮攻击 :) 其就可以独立出来,由工厂组合它们。

一般原则是,自己维护的继承关系不要超过三层,更多的使用组合而不是继承。
  相关解决方案