设计模式成长记(一) 抽象工厂模式(Abstract Factory)

小说:股市解套的几种方法--必看作者:秉邓文乙更新时间:2019-03-26字数:69952

晶莹的蓝银草飘然而下,每一根草叶都化为一道流光,从唐三的脚下攀升旋绕而上,一直蔓延到大腿根部才停止,铿锵的爆鸣声中,唐三只觉得右腿一紧,强大的力量感顿时传遍全身。醇和的能量瞬间波动。蓝金色的铠甲伴随着蓝银草带来的绚丽光彩,与唐三的右腿完全契合在一起。

感觉自己干什么都不行,怎么办?

刚才他已经连续派出去了几个通讯兵,让他们出去联络附近的皇军部队前来增援,但都没有了信息,估计是半路上被中国军队射杀了。
此时张筠也渐渐感觉到,政事堂已被枢密处架空,虽然枢密处的执行机构,但定款有一条:凡政事堂不决者,枢密处可自处之。

虽然没有找到关于那镜门的线索,但是却知道了这木易的事情,这让叶扬心中泛起了不小的波澜。

设计模式成长记(一) 抽象工厂模式(Abstract Factory)


目录

  • 定义
  • UML类图
  • 参与者
  • 编写代码
  • 特点

 

定义

提供一个创建一系列相关或相互依赖的对象的接口,而无需指定具体的类。

使用频率:

 

UML类图

 

参与者

AbstractFactory:声明一个创建抽象产品的的接口。

ConcreteFactory:实现接口创建具体的产品对象。

AbstractProduct:产品的抽象。

Product:具体的产品,实现抽象产品的接口。

Client:使用抽象工厂和抽象产品。

 

编写代码

1.新建控制台程序AbstractFactory,新增Abstract.cs类文件

using System;


/// <summary>
/// 抽象工程模式:提供一个创建一系列相关或相互依赖对象的接口,而无须指定具体的类。
/// </summary>
namespace AbstractFactory
{
    /// <summary>
    /// 抽象产品A
    /// </summary>
    public abstract class AbstractProductA
    {
        public abstract void SayHello();
    }

    /// <summary>
    /// 抽象产品B
    /// </summary>
    public abstract class AbstractProductB
    {
        public abstract void SayHello();
    }

    /// <summary>
    /// 具体产品A1
    /// </summary>
    public class ProductA1 : AbstractProductA
    {
        public override void SayHello()
        {
            Console.WriteLine("Hello,我是具体产品A1");
        }
    }

    /// <summary>
    /// 具体产品A2
    /// </summary>
    public class ProductA2 : AbstractProductA
    {

        public override void SayHello()
        {
            Console.WriteLine("Hello,我是具体产品A2");
        }
    }

    /// <summary>
    /// 具体产品B1
    /// </summary>
    public class ProductB1 : AbstractProductB
    {
        public override void SayHello()
        {
            Console.WriteLine("Hello,我是具体产品B1");
        }
    }

    /// <summary>
    /// 具体产品B2
    /// </summary>
    public class ProductB2 : AbstractProductB
    {
        public override void SayHello()
        {
            Console.WriteLine("Hello,我是具体产品B2");
        }
    }

    /// <summary>
    /// 抽象工厂:提供创建抽象产品的接口
    /// </summary>
    public abstract class AbstractFactory
    {
        public abstract AbstractProductA CreateProductA();
        public abstract AbstractProductB CreateProductB();
    }

    /// <summary>
    /// 具体工厂:实现抽象工厂创建产品的接口
    /// </summary>
    public class ConcreteFactory1 : AbstractFactory
    {
        public override AbstractProductA CreateProductA()
        {
            return new ProductA1();
        }

        public override AbstractProductB CreateProductB()
        {
            return new ProductB1();
        }
    }


    public class ConcreteFactory2 : AbstractFactory
    {
        public override AbstractProductA CreateProductA()
        {
            return new ProductA2();
        }

        public override AbstractProductB CreateProductB()
        {
            return new ProductB2();
        }
    }

    public class Client
    {
        private AbstractProductA _productA;
        private AbstractProductB _productB;

        public Client(AbstractFactory factory)
        {
            _productA = factory.CreateProductA();
            _productB = factory.CreateProductB();
        }

        public void Run()
        {
            _productA.SayHello();
            _productB.SayHello();
        }
    }
}

2.编写Program.cs

using System;

namespace AbstractFactory
{
    class Program
    {
        static void Main(string[] args)
        {
            //使用工厂1
            AbstractFactory factory = new ConcreteFactory1();
            Client client = new Client(factory);//依赖注入
            client.Run();

            Console.WriteLine();

            //使用工厂2
            factory = new ConcreteFactory2();
            client = new Client(factory);
            client.Run();

            Console.Read();
        }
    }

  
}

3.输出结果

 

 

特点

1) 分离了具体的类

Abstract Factory 模式帮助你控制一个应用创建的对象的类。因为一个工厂封装创建产品对象的责任和过程,它将客户与类的实现分离。客户通过它们的抽象接口操纵实例。产品的类名也在具体工厂的实现中被分离;它们不出现在客户代码中。


2) 使得易于交换产品系列
一个具体工厂类在一个应用中仅出现一次—即在它初始化的时候。这使得改变一个应用的具体工厂变得很容易。它只需改变具体的工厂即可使用不同的产品配置,这是因为一个抽象工厂创建了一个完整的产品系列,所以整个产品系列会立刻改变。


3) 有利于产品的一致性

当一个系列中的产品对象被设计成一起工作时,一个应用一次只能使用同一个系列中的对象,这一点很重要。而AbstractFactory很容易实现这一点。

 

4) 难以支持新种类的产品

难以扩展抽象工厂以生产新种类的产品,这是因为AbstractFactory接口确定了可以被创建的产品集合。 支持新种类的产品就需要扩展该工厂接口,这将涉及 AbstractFactory类及其所有子类的改变。

 

当前文章:http://0477auto.com/news/2018102074857/index.html

发布时间:2019-03-26 01:11:43

林中漫步能缓解抑郁心情 【情感问答】灰姑娘般的我,会有人喜欢吗 一个人是怎样一步步变狭隘的 拿什么管住你,校园暴力? 早死心 早解脱—从《琅琊榜》说开去 | 晓雅 人格健康与家庭教育 2011成长营:参加国际大赛的经历 怀孕日记——和我们不一样的那拨人

“何式戒瘾法”简介及理论依据 十条经营婚姻的金科玉律 为什么说大部分人的勤奋是完全无效的 游完泳回到家还会溺死? 非比学习能力训练中的一天 怎样安慰情绪低落的朋友 让心理学社会学教你 应试教育下成长的孩子就不能幸福吗? 《超级飞侠》亲子手游娱乐挑战无极限 为什么说“女汉子”是一个伪命题? 孩子出生重要的前3年 天津心理工作站战友印象之赵海华 将男人挂在树枝上 奔向未来的日子 我的意中人是个盖世英雄 婆媳不和,因為中間有個笨男人 千年之恋 孩子入园不适怎么办? 人格健康与家庭教育 大学生创业避免三大雷区

编辑:海丁

我要说两句: (0人参与)

发布