zoukankan      html  css  js  c++  java
  • 工厂方法模式

    简单工厂模式的最大长处在于工厂类中包括了必要的逻辑推断。依据client的钻则条件动态实例化相关的类。对于client来说,去除了与详细产品的依赖。


    工厂方法模式,定义了一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。工厂方法模式实现时。client须要决定实例化哪一个工厂来实现运算类,选择推断的问题还是存在的,也就是说,工厂方法把简单的内部逻辑推断转移到了client代码来进行,假设加入功能。本来须要改动工厂类,而如今改动的是client。

     class Namer
        {
            public string fName, lName;
    
            public void GetLName()
            {
                Console.WriteLine(lName);
            }
    
            public void GetFName()
            {
                Console.WriteLine(fName);
            }
        }
        class FirstName : Namer
        {
            public FirstName(string name)
            {
                int i = name.Trim().IndexOf(",");
                if (i > 0)
                {
                    fName = name.Substring(0, i).Trim();
                    lName = name.Substring(i + 1).Trim();
                }
                else
                {
                    lName = name;
                    fName = "";
                }
            }
        }
        public LastName(string name)
            {
                int i = name.Trim().IndexOf(",");
                if (i > 0)
                {
                    lName = name.Substring(0, i);
                    fName = name.Substring(i + 1).Trim();
                }
                else
                {
                    lName = name;
                    fName = "";
                }
            }
        }
         interface INameFactory
        {
            Namer CreatName(string _name);
        }
        class FirstNameFactory : INameFactory
        {
            public Namer CreatName(string _name)
            {
                return new FirstName(_name);
            }
        }
        class LastNameFactory : INameFactory
        {
            public Namer CreatName(string _name)
            {
                return new LastName(_name);
            }
        }
         class Program
        {
            static void Main(string[] args)
            {
                INameFactory inf = new FirstNameFactory();
                Namer nm = inf.CreatName("Hello,world");
                nm.GetFName();
                nm.GetLName();
            }
        }

    在下列情况下,应该考虑使用工厂方法:
    一个类无法预測他要创建的对象属于哪一个类
    一个类用它的子类来指定创建对象
    要把创建哪一个类的信息局部化的时候

  • 相关阅读:
    Django继承user类来定制自己的user类
    pycharm下载 安装 使用
    360 so动态脱壳
    爱加密so保护简单脱壳测试
    菜鸟 学注册机编写之 “sha1”
    海海DRM视频保护解密流程分析
    通过CreateThreadpoolWait执行Shellcode
    .net学习--Fastjson反序列漏洞
    .net JavaScriptSerializer反序列化漏洞
    java web安全(自定义Classloader)--服务器端动态解析二进制class文件
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/7243087.html
Copyright © 2011-2022 走看看