您的位置:首页 > 其它

设计模式系列-03-创建模式-工厂方法

2016-11-07 21:02 330 查看

设计模式系列-01-开篇

设计模式系列-02-创建模式-简单工厂

设计模式系列-03-创建模式-工厂方法

视屏爱好者点这里

1.解决什么问题?

a,解决简单工厂的每增加一个产品都要去改工厂类,不符合开闭原则。不满足搞内聚低耦合的设计思想

2.怎么使用

2.1 UML类图



场景: 拿DOTA举例子,天灾和近卫都有各自的英雄,那么咋生产的时候是从不同的工厂去生产。

现在有天灾和近卫的两个工厂分别生产不同的英雄。把原来的简单工厂进行职责的分离。保持类的单一职责。便于后期的扩展

2.2 这样做的好处

a,现在如果要生产天灾的英雄,那么我近卫的工厂是不用动的,解决了简单工厂的每次都需要去改动工厂

b,前段的client只要改个对应的参数就可以

3. 核心的代码

IFactory

public interface IFactory
{
IHero CrateHero(HeroEnun heroEnum);

}


ScourgeFactory

public class ScourgeFactory : IFactory
{

public IHero CrateHero(HeroEnun heroEnum)
{
switch (heroEnum)
{
case HeroEnun.CK:
return new CK();
case HeroEnun.SF:
return new SF();
default:
return null;
}
}
}


SentinelFactory

public class SentinelFactory : IFactory
{

public IHero CrateHero(HeroEnun heroEnum)
{
switch (heroEnum)
{
case HeroEnun.Coco:
return new  Coco();
default:
return null;
}
}
}


Client

IFactory factory1 = new ScourgeFactory();
IHero hero1 = factory1.CrateHero(HeroEnun.SF);
hero1.ShowMoveSpeed();
IFactory factory2 = new SentinelFactory();
IHero hero2 = factory2.CrateHero(HeroEnun.Coco);
hero2.ShowMoveSpeed();


4.源码地址

https://git.oschina.net/yudaming/DesignPatterns/tree/master
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: