• 我也设计模式——1.Factory Method


    工厂方法模式,就是使一个类的实例化延迟到子类——惰性声明
    UML图如下:

        public class Production { }

        
    public abstract class Creator
        
    {
            
    public abstract Production FactoryMathod();
        }


        
    public class ConcreteCreator : Creator
        
    {
            
    public override Production FactoryMathod()
            
    {
                
    return new Production();
            }

        }

    工厂方法模式无处不在,创建型模式都是依赖于工厂模式的。

    简单工厂Simple Factory,这是工厂方法模式的一个特例,因为该模式是通过switch分支(也有用if判断的),来决定最终生成哪一个对象的,而这个switch分支语句,嵌在一个静态方法中,这个改装就是简单工厂。


        public abstract class A
        
    {
            
    public abstract void Do();
        }


        
    public class A1 : A
        
    {
            
    public override void Do()
            
    {
                Console.WriteLine(
    "A1");
            }

        }


        
    public class A2 : A
        
    {
            
    public override void Do()
            
    {
                Console.WriteLine(
    "A2");
            }

        }


        
    public class CreateA
        
    {
            
    public static A CreateAFactory(int type)
            

                
    switch(type)
                
    {
                    
    case 1:
                        
    return new A1();
                        
    break;
                    
    case 2:
                    
    default:
                        
    return new A2();
                        
    break;
                }

            }

        }

    在Client端,只要使用            CreateA.CreateAFactory(1).Do();    就可以生成需要的对象

    简单工厂的缺点是,一旦增加新产品类,同时要实现抽象类中的所有方法;还有,一旦要修改抽象类中的方法,所有子类都要变动——扩展性差,不符合开闭原则。

    另外,简单工厂模式通常使用静态工厂方法,这使得无法由子类继承,造成工厂角色无法形成基于继承的等级结构。

  • 相关阅读:
    JS框架_(JQuery.js)网页文字评论弹幕
    JS框架_(JQuery.js)文章全屏动画切换
    JS框架_(coolShow.js)图片旋转动画特效
    JS框架_(JQuery.js)高德地图api
    JS框架_(JQbar.js)柱状图动态百分比进度条特效
    JS框架_(JQuery.js)Tooltip弹出式按钮插件
    JS框架_(Popup.js)3D对话框窗口插件
    JS框架_(Progress.js)圆形动画进度条
    JS框架_(JQuery.js)动画效果鼠标跟随
    JS框架_(Esign.js)仿信用卡电子签名特效
  • 原文地址:https://www.cnblogs.com/Jax/p/912772.html
Copyright © 2020-2023  润新知