重复构造,打出『原型模式』

作者: 圣杰 | 来源:发表于2016-11-06 07:29 被阅读148次

目录:设计模式之小试牛刀
源码路径:Github-Design Pattern


定义:(Prototype Pattern)

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

类图:

启示:

邮件外发模块的开发:比如某银行有个理财活动想通过邮件的形式群发给客户推广。
通过分析,我们知道邮件的内容部分即活动内容是固定的,发件人都是银行,不同的是,接收人邮箱及对客户的称呼。如果每次外发邮件都要重新构建一个邮件对象,如果仅仅是几百用户也无可厚非,但对于几百万的客户,这样做肯定是不行的,我们可以通过对象复制的方式来进行对象的创建,再更改不同的部分,以提高性能。

代码:

 public class Email : ICloneable
    {
        public string Receiver { get; set; }
        public string Sender { get; set; }
        public string Subject { get; set; }
        public string Name { get; set; }
        public string Content { get; set; }
        public string Footer { get; set; }
        public object Clone()
        {
            return this.MemberwiseClone();
        }
    }

 class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("原型模式:");
            Email email = new Email()
            {
                Sender = "noreply@cmb.com",
                Subject = "招商银行月开鑫基金上线啦,最低年化收益7%,速速抢购!",
                Content = "招商银行月开鑫基金上线啦,最低年化收益7%,速速抢购,手慢无,每人限购1万,详情咨询95555!",
                Footer = "招商银行"
            };

            for (int i = 0; i < 10000; i++)
            {
                string receiver = string.Format("kehu{0}@qq.com", i);
                string name = string.Format("尊敬的客户『{0}』:", i);
                var cloneEmail = email.Clone() as Email;
                cloneEmail.Receiver = receiver;
                cloneEmail.Name = name;

                SendEmail(cloneEmail);
            }
        }
        private static void SendEmail(Email email)
        {
            Console.WriteLine(string.Format("邮件已发送至:『{0}』", email.Receiver));
        }
    }

应用场景:

一个对象的产生可以不由零起步,直接从一个已经具备一定雏形的对象克隆,然后再修改为生产需要的对象。

优缺点:

优点:
原型模式向客户隐藏了创建新实例的复杂性
缺点:
1、每个类必须配备一个克隆方法
2、配备克隆方法需要对类的功能进行通盘考虑,这对于全新的类不是很难,但对于已有的类不一定很容易,特别当一个类引用不支持串行化的间接对象,或者引用含有循环结构的时候。

注意事项:

注意对象的深拷贝与浅拷贝的不同。

相关文章

  • 重复构造,打出『原型模式』

    目录:设计模式之小试牛刀源码路径:Github-Design Pattern 定义:(Prototype Patt...

  • 前端面试题总结【37】:javascript对象的几种创建方式

    工厂模式 构造函数模式 原型模式 混合构造函数和原型模式 动态原型模式 寄生构造函数模式 稳妥构造函数模式 推荐:...

  • js集成

    原始继承模式--原型链 2:借用构造函数 3:共享构造原型 4:圣杯模式原型链; 构造函数; 共享原型; 圣杯模式...

  • 构造函数-js-高级程序设计-第六章笔记

    前言 理解对象 创建对象构造函数模式原型模式组合使用构造函数模式和原型模式动态原型模式寄生构造函数模式稳妥构造函数...

  • 对象的创建与继承

    创建对象 工厂模式 => 构造函数模式 => 原型对象模式 => 构造函数模式+原型对象模式 工厂模式 构造函数模...

  • Js创建对象的几种模式

    Js创建对象的几种模式 工厂模式 构造函数模式 原型模式 组合使用构造函数模式和原型模式 动态原型模式 稳妥构造函数模式

  • js面向对象设计模式

    1、工厂模式 2、构造函数模式 3、原型模式 4、组合使用构造函数模式和原型模式 5、动态原型模式 6、寄生构造函...

  • js 集成模式 07-24

    **原始继承模式--原型链 2:借用构造函数 3:共享构造原型 4:圣杯模式**一:原型链; 二:构造函数; 三:...

  • js面向对象的几种写法

    一、工厂模式 二、构造函数模式 三、原型模式 四、组合使用构造函数和原型模式 五、原型链继承 六、借用构造函数继承...

  • 关于JavaScript创建对象的多种方式

    JavaScript创建对象的方法 工厂模式 构造函数模式 原型模式 组合使用构造函数模式和原型模式 动态原型模式...

网友评论

  • fb5ad43e04fc:我测试过,吧循环变量再加2个0,直接在循环内部new一个Email的效果和在循环内部做克隆,他们占用的内存和消耗的时间都差不多,你可以测试一下。

本文标题:重复构造,打出『原型模式』

本文链接:https://www.haomeiwen.com/subject/eefguttx.html