设计模式系列-03-创建模式-工厂方法
设计模式系列-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