zoukankan      html  css  js  c++  java
  • 设计模式学习工厂方法模式

    在C#中应用工厂模式

    工厂方法模式来自于创建模式的分类,创建模式是最好的处置创建对象的方式,工厂方法提供了一个简单的
    决策,该决策得出了这样一个类,该类能够返回一个抽象基类的几个子类的对象,这里抽象基类以来与提供的
    信息.

    "为每一个创建的对象定义一个接口,但是让子类决定由哪个类去初始化,工厂方法让一个类遵从子类的指令去初始
    化."   --"设计模式"  Gamma et al., Addison-Wesley, ISBN:0-201-63361-2" 

    非软件实例

    喷射模型展示了这种模式, 朔料玩具厂处理熟料模型粉末,并且喷射朔料到设计好造型的模子里, 这个玩具类被
    模子决定了,

    一个工厂模型是一个返回几个可能的类之一的一个实例,这几个可能的类依赖于提供给它们的数据,一般来讲,
    所有的类都应该有一个通用的基类和通用的方法,但是方法的实现可能不同.

    下面的 UML 表示了工厂方法模式,在这个例子中,我们没有直接创建类Derived1 和Derived2 ,而是使用
    工厂类的 getObject() 方法,根据传递的参数去返回一个合适的实例.这样的方法一般叫做工厂方法.工厂
    方法可以是静态的也可以是非静态的.



    C#中实现工厂方法:

        //Creational Pattern: The Factory Method
        
    //In Factory method pattern, 
        
    //A Factory class contains a factory method is used for creating the object. 
        
    //This factory method can be either static or non-static.

        
    class Factory
        
    {
            
    public Base GetObject(int type)
            
    {
                Base base1 
    = null;
                
    switch (type)
                
    {
                    
    case 1:
                        base1 
    = new Derived1();
                        
    break;
                    
    case 2:
                        base1 
    = new Derived2();
                        
    break;
                }

                
    return base1;
            }

        }

        
    interface Base
        
    {
            
    void DoIt();
        }

        
    class Derived1 : Base
        
    {
            
    public void DoIt()
            
    {
                Console.WriteLine(
    "Derived 1 method");
            }

        }

        
    class Derived2 : Base
        
    {
            
    public void DoIt()
            
    {
                Console.WriteLine(
    "Derived 2 method");
            }

        }

        
    //--------Client class----------
        
    //Client class needn't know about instance creation. 
        
    //The creation of Product is 
        
    //deferred to the Factory class
        class MyClient
        
    {
            
    public static void Main()
            
    {
                Factory factory 
    = new Factory();//Decides which object must create.
                Base obj = factory.GetObject(2);
                obj.DoIt();
            }

        }

    这就是工厂方法的基本规则, 我们创建了一个抽象,这个抽象决定了哪几个可能的类被返回, 并且返回一个.之后
    我们就能够调用类实例的方法,甚至不需要实际上在使用被继承类是哪一个,对象的建立发生在工厂类内的一个
    单独的地方.

    记住工厂类可以包含很多个工厂方法,甚至这些工厂方法能够是静态或者非静态.


  • 相关阅读:
    SpringBoot自动配置原理(七)
    SpringBoot 集成Shiro
    Shiro配置跳过权限验证
    rsync+ssh同步备份文件
    okhttp3设置代理(http/https)
    Spring RestTemplete支持Https安全请求
    电商课题V:分布式锁
    电商课题:对付秒杀器等恶意访问行为的简单梳理
    电商课题:客户端的IP地址伪造、CDN、反向代理、获取的那些事儿
    电商课题I:集群环境下业务限流
  • 原文地址:https://www.cnblogs.com/flyinthesky/p/1218500.html
Copyright © 2011-2022 走看看