设计模式系列-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

原文地址:https://www.cnblogs.com/damsoft/p/6040645.html