zoukankan      html  css  js  c++  java
  • 极速理解设计模式系列:21.简单工厂模式(Simple Factory Pattern)

    四个角色:抽象产品(Product)、具体产品(Concrete Product)、工厂(Creator)、客户端(Client) 

            抽象产品(Product):需要创建的各种产品的父类。这类产品有共同的接口。

            具体产品(Concrete Product):需要创建的具体对象。

            工厂(Creator):内部逻辑可以控制生成目标对象。

            客户端(Client):实例化工厂,然后工厂根据传入参数得到各种产品。调用产品实现不同功能。

     实现思路:首先将工厂实例化,然后使用工厂创建产品赋值给抽象产品的引用,然后通过抽象产品的公共接口调用具体产品的方法以实现功能。

    类图: 

    应用场景:苹果公司的工厂生产iphone 4、ipad 2、ipod nano 6。

    分析:这里多种产品都可以运行,所以有一个公共方法,然后抽象为父类。

            下面我们在控制台程序去演示一下如何使用Simple Factory Pattern:

            一、抽象产品(Product):

        //抽象产品(Product)
    abstract class Apple
    {
    public abstract void Run();
    }

            二、具体产品(Concrete Product):

        //具体产品(Concrete Product)
    class Iphone : Apple
    {
    public override void Run()
    {
    Console.WriteLine("iphone 4 开始运行!");
    }
    }

    //具体产品(Concrete Product)
    class Ipad : Apple
    {
    public override void Run()
    {
    Console.WriteLine("ipad 2 开始运行!");
    }
    }

    //具体产品(Concrete Product)
    class IpodNano : Apple
    {
    public override void Run()
    {
    Console.WriteLine("ipod Nano 6 开始运行!");
    }
    }

            三、工厂(Creator):

        //工厂(Creator)
    class AppleFactory
    {
    public Apple CreateApple(string productName)
    {
    switch (productName.ToUpper())
    {
    case "IPHONE":
    return new Iphone();
    case "IPAD":
    return new Ipad();
    case "IPODNANO":
    return new IpodNano();
    default:
    return null;
    }
    }
    }

            四、客户端(Client):

        //客户端(Client)
    class Program
    {
    static void Main(string[] args)
    {
    AppleFactory factory = new AppleFactory();
    Apple iphone= factory.CreateApple("iphone");
    iphone.Run();
    Apple ipad = factory.CreateApple("ipad");
    ipad.Run();
    Apple ipodnano = factory.CreateApple("ipodnano");
    ipodnano.Run();
    Console.ReadLine();
    }
    }

           如需源码请点击 SimpleFactoryPattern.rar 下载。

  • 相关阅读:
    git 问题集
    es7集群安装配置及常用命令
    idea maven项目操作kafka--生产者和消费者
    linux中kafka集群搭建及常用命令
    xampp 支持php版本,支持php5.2的最后一版xampp——xampp-1.7.1
    TCP和UDP的区别及各自优缺点区别
    Qt容器(QHash/QMap等)基本学习记录
    linux系统剪切
    简单网络IP探索
    C++(Qt)线程与锁
  • 原文地址:https://www.cnblogs.com/chengxingliang/p/2283466.html
Copyright © 2011-2022 走看看