博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式之工厂模式(三)
阅读量:7177 次
发布时间:2019-06-29

本文共 2100 字,大约阅读时间需要 7 分钟。

hot3.png

意图:

定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟到子类(即:工厂子类)。

 

工厂模式结构图:

 

工厂模式代码实现

using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 工厂模式

{
    class Program
    {
        static void Main(string[] args)
        {
           
            
           
            Factory factory = null;
            Product product = null;
            while (true)
            {
                Console.WriteLine("你想生产Car请按1键,想生产AirPlane请按2键,想生产Tank请按3键");
                int num = int.Parse(Console.ReadLine());
                switch (num)
                {
                    case 1: factory = new FactoryCar(); product = factory.produc(); break;
                    case 2: factory = new FactoryAirPlane(); product = factory.produc(); break;
                    case 3: factory = new FactoryTank(); product = factory.produc(); break;

                    default: Console.WriteLine("请按1~3键"); break;

                }

            
            }
          

            

            Console.ReadLine();

           

        }

        public static void print(string str)
        {
            Console.WriteLine(str);
        }
    }

    public abstract class Factory//工厂父类

    {
        public abstract Product produc();

    

    }

    public class FactoryCar : Factory//生产Car的工厂

    {
        public override Product produc()
        {
            Console.WriteLine("你生产了一辆车");
            return new car();
        }
    }

    public class FactoryAirPlane : Factory//生产Car的工厂

    {
        public override Product produc()
        {
            Console.WriteLine("你生产了一架飞机");
            return new airplane();

        }

    }
    public class FactoryTank : Factory//生产Tank的工厂
    {
        public override Product produc()
        {
            Console.WriteLine("你生产了一辆坦克");
            return new Tank();
        }
    }
    public abstract class Product//产品类
    {
       
        public abstract string production();//生产产品
    }

    public class car:Product//Car产品

    {
        public override string production()
        {
            return "car";
        }
    }

    public class airplane:Product//飞机产品

    {
        public override string production()
        {
            return "airplane";
        }
    
    }

    public class Tank : Product//坦克产品

    {
        public override string production()
        {
            return "tank";
        }
    
    }
}
 

实现要点

Factory Method模式的两种情况:一是Creator类是一个抽象类且它不提供它所声明的工厂方法的实现;二是Creator是一个具体的类且它提供一个工厂方法的缺省实现。

工厂方法是可以带参数的。

工厂的作用并不仅仅只是创建一个对象,它还可以做对象的初始化,参数的设置等。

 

功能

 

用工厂方法在一个类的内部创建对象通常比直接创建对象更灵活。

Factory Method模式通过面向对象的手法,将所要创建的具体对象的创建工作延迟到了子类,从而提供了一种扩展的策略,较好的解决了这种紧耦合的关系。

 

适用类型

在以下情况下,适用于工厂方法模式:

1. 当一个类不知道它所必须创建的对象的类的时候。
2. 当一个类希望由它的子类来指定它所创建的对象的时候。
3. 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。

转载于:https://my.oschina.net/u/2874878/blog/735369

你可能感兴趣的文章
原:视频直播技术中的参考技术网页
查看>>
linq教程
查看>>
requests从api中获取数据并存放到mysql中
查看>>
23种设计模式之组合模式(Composite)
查看>>
button按钮点击不刷新(前端交流学习:452892873)
查看>>
安卓 使用Gradle生成正式签名apk文件
查看>>
@Html.Raw()
查看>>
ES6 Proxy
查看>>
图的基本算法(BFS和DFS)
查看>>
Linux时区详解
查看>>
61.node.js开发错误——Error: Connection strategy not found
查看>>
算法逆向第一篇——简单算法逆向
查看>>
机房收费系统数据库概念结构设计
查看>>
NanoJIT
查看>>
一个最简单GAL游戏资源文件黑盒分析(二)
查看>>
SQL Server 2005允许远程连接的配置说明
查看>>
HQL 语句
查看>>
用实现ajax读博客rss示例代码
查看>>
MVC验证12-使用DataAnnotationsExtensions对整型、邮件、最小值、文件类型、Url地址等验证...
查看>>
hdu1962Corporative Network带权回路
查看>>