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

    关于简单工厂,

    今天稍微写一下。

    举个简单的例子。

    假设我们需要根据命令,输出 “Hello ClassA”或者 “Hello ClassB”


    一般我们这么做~

    根据用户输入来选择,或者根据类型来选择,(用if/else 或者 switch随便你,但这不是本文的重点!大哭

    string str=Console.ReadLine();
                if (str == "ClassA")
                {
                    Console.WriteLine("Hello ClassA");
                }
                else if (str == "ClassB")
                {
                    Console.WriteLine("Hello ClassB");
                }
                else
                { 
                    
                }

    如果代码需要更改,增加一个 ClassC,那么我们不得不继续增加一个 else if


    由于以上问题,我们终于衍生出了工厂模式

    首先我们创建一个  抽象的基类~哈哈微笑

    写一个抽象方法。就是用来打印文字。

    public abstract class BaseClass
            {
                public abstract void WriteStr();
            }


    好啦,然后我们分别创建 ClassA 和 ClassB 

    让他们继承BaseClass基类,并且实现了当中的

     WriteStr()方法,哈哈

    public class ClassA : BaseClass
            {
                public override void WriteStr()
                {
                    Console.WriteLine("Hello ClassA");
                }
            }
    
            public class ClassB : BaseClass
            {
                public override void WriteStr()
                {
                    Console.WriteLine("Hello ClassB");
                }
            }


    然后我们局可以调用了

    BaseClass b = new ClassA();
                BaseClass b1 = new ClassB();
    
                b.WriteStr();       //输出:Hello ClassA
                b1.WriteStr();      //输出:Hello ClassB

    是不是很简单?根据子类引用,获得不同的对象。然后输出对应的字符串~


    但是!!!但是,兄弟们啊,既然都做到这一步了。那我们在稍微多做一步啊。。。虽然上面看似差不多了。

    但也只是差不多而已。。。

    说白了,工厂模式,就是为了减少维护工作,是class对外禁止修改,扯一大堆。。。。我觉得就是减少代码量。好维护。。。就这样。

    继续继续。

    我们在上面的代码中,继续写下:

    这里就是根据传入的T,创建不同的ClassA或者 ClassB

    public class Class2
            {
                public virtual T CreateClass<T>() where T : BaseClass, new()
                {
                    T obj = new T();
                    return obj;
                }
            }

    调用代码:

    public static void Main(string[] args)
            {
                BaseClass b = new Class2().CreateClass<ClassB>();
                b.WriteStr();
    
                Console.ReadLine();
    
                
    
            }


    好啦,就这么完成了,其实很简单。

    宗旨就是,我们将多个有关联的同种类Class继承自一个基类:BaseClass。

    然后实现他们共有的方法,

    最后通过ClassCreate来创建实例对象。

    这样,在以后如果还存在 ClassC的时候,我们只需要增加一个新的Class,而不是去修改代码。就可以啦~~~可怜



  • 相关阅读:
    使用ZooKeeper实现Java跨JVM的分布式锁
    基于ZooKeeper的分布式锁和队列
    activiti数据库表结构剖析
    visualvm监控jvm及远程jvm监控方法
    使用visualvm 远程监控 JVM
    java jprofile
    Linux服务器上监控网络带宽的18个常用命令
    Redis-sentinel哨兵模式集群方案配置
    电容的去耦半径
    DC-DC BUCK电源芯片的基本原理和组成
  • 原文地址:https://www.cnblogs.com/hanjun0612/p/9779914.html
Copyright © 2011-2022 走看看