zoukankan      html  css  js  c++  java
  • 设计模式系列-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

  • 相关阅读:
    js学习之函数
    面试题
    渐进增强(progressive enhancement)、优雅降级(graceful degradation)
    倒计时
    css 平行四边形
    网址URL分解
    图片延时加载
    获取元素的宽高,左边距上边距
    电商平台放大镜效果
    js笔记
  • 原文地址:https://www.cnblogs.com/damsoft/p/6040645.html
Copyright © 2011-2022 走看看