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 下载。

  • 相关阅读:
    改变UITabbar顶部分割线颜色
    UITableViewCell添加点击时改变字体的颜色、背景、图标
    【转】有了Auto Layout,为什么你还是害怕写UITabelView的自适应布局?
    AFNetworking https自签名证书 -1012 解决方案
    关于AFNetWorking 2.5.4之后版本编译报错问题解决方案
    UIImageView 使图片圆形的方法
    关于使用IQKeyBoardManager键盘还是被遮挡的问题解决方案
    关于ios7 以上版本 view被导航栏遮挡的问题 解决方案
    手动导入第三方工程/类库
    “请不要直接访问超全局$_GET数组”
  • 原文地址:https://www.cnblogs.com/chengxingliang/p/2283466.html
Copyright © 2011-2022 走看看