zoukankan      html  css  js  c++  java
  • 简单工厂模式

    简单工厂模式实际上不属于23个GoF模式中的一种。

    简单工厂模式是通过传入的数据返回几种可能类中的一种类的实例。但这几种类一般会有一个共同特点是,这几种类都有一个共同的父类和共同的方法,但每个方法执行的内容不同,而且根据不同的数据进行优化。

    下面看个例子:

     假设我们总是可以通过逗号或者分号来把一个名字分成firstname和lastname。用工厂模式如何实现那?

    1、两个派生类

    //基础类
    public class Name
    {
                protected string fName;
                protected string lName;

                //只有基类有

                public string GetFirstName()
                {
                    return fName;
                }

                //只有基础类
                public string GetLastName()
                {
                    return lName;
                }
            }


    //Firstname
    public class FirstName : Name
            {
                public FirstName(string name)
                {
                    int k = name.Trim().IndexOf(';');
                    if (k > -1)
                    {
                        base.fName = name.Substring(0, k);
                        base.lName = name.Substring(k + 1);
                    }
                    else
                    {
                        base.fName = name;
                        base.lName = string.Empty;
                    }
                    
                }
            }

    //Lastname
    public class LastName : Name
            {
                public LastName(string name)
                {
                    int k = name.Trim().IndexOf(',');
                    if (k > -1)
                    {
                        fName = name.Substring(0, k);
                        lName = name.Substring(k + 1);
                    }
                    else
                    {
                        fName = string.Empty;
                        lName = name;
                    }
                }
            }

    2、工厂类

    //工厂类
    public class Factory
            {

                //判断区别,返回其中一个派生类实例
                public Name GetName(string name)
                {
                    if (name.IndexOf(',') > -1)
                    {
                        return new LastName(name);
                    }
                    else
                    {
                        return new FirstName(name);
                    }
                }
            }

    3、使用工厂类

    //声明工厂
    Factory fact = new Factory();

    //获取派生类
    Name name = fact.GetName("firstname;11lastname");
    Console.WriteLine(name.GetFirstName() + "@@" + name.GetLastName());

    我们知道,简单工厂能够返回具有相同方法的实例,他们可以是不同的派生子类的实例,也可以是实际上毫无关系仅仅是提供了相同接口的类。不管那一种形式,这些类实例中的方法必须相同的,并且能够被交替使用。

    ———————————————————————————————————————— 

     一个人的时候,总是在想

        我的生活到底在期待什么……

  • 相关阅读:
    Java synchronized对象级别与类级别的同步锁
    java并发编程JUC第十二篇:AtomicInteger原子整型
    java并发编程JUC第十一篇:如何在线程之间进行对等数据交换
    java并发编程JUC第十篇:CyclicBarrier线程同步
    java并发编程JUC第九篇:CountDownLatch线程同步
    java并发编程工具类JUC第八篇:ConcurrentHashMap
    分享Sql性能优化的一些建议
    java并发编程工具类JUC第七篇:BlockingDeque双端阻塞队列
    java并发编程工具类JUC第六篇:SynchronousQueue同步队列
    java并发编程工具类JUC第五篇:PriorityBlockingQueue优先级队列
  • 原文地址:https://www.cnblogs.com/freeton/p/2251912.html
Copyright © 2011-2022 走看看