模式六(原型模式)

通过给出一个原型对象来指明所要创建的对象类型,然后用复制这个对象的办法创建更多的同类型对象

客户角色:客户类提供创建对象的请求。
抽象原型角色:这是一个抽象角色,通常由一个c#接口或抽象类实现,此角色给出所有的具体原型类所需的接口,在c#中抽象原型角色通常实现了ICioneable接口。
具体原型角色:被复制的对象,此角色需要实现抽象原型角色所需求的接口。
using System;
using System.Collections.Generic;
using System.Text;
namespace Simple_Factory
{
    /// <summary>
    /// 抽象原型类
    /// </summary>
    abstract class ProtoType
    {
        private string id;
        public string Id
        {
            get
            {
                return id;
            }
        }
        public ProtoType(string id)
        {
            this.id = id;
        }
        abstract public ProtoType Clone();
    }
    /// <summary>
    /// 具体原型类
    /// </summary>
    class ConcreatePrototype1 : ProtoType
    {
        public ConcreatePrototype1(string id) : base(id) { }
               
        public override ProtoType Clone()
        {
            return (ProtoType)this.MemberwiseClone();
        }
    }
    class ConcreatePrototype2:ProtoType
    {
        public ConcreatePrototype2(string id) : base(id) { }
        public override ProtoType Clone()
        {
            return (ProtoType)this.MemberwiseClone();
        }
    }
    class Client
    {
        public static void Main(string[] args)
        {
            ConcreatePrototype1 p1 = new ConcreatePrototype1("I");
            ConcreatePrototype1 c1 =(ConcreatePrototype1) p1.Clone();
            Console.WriteLine("Clone:{0}",c1.Id);
        }
    }
}
优点:
允许动态增加或减少产品类,由于创建产品类实例的方法是产批类内部具有的,因此增加新产品对整个结构没有影响。
简化的创建结构,工厂方法模式常常需要有一个与产品类等级结构相同的等级结构。
具有给一个应用软件动态加载新功能的能力,由于原型模式的独立性比较高,可以很容易动态加载新功能而不影响老系统。
产品类不需要非得有任何事先确定的等级结构,因为原型模式适用于任何的等级结构。
缺点:
每个类必须配备一个克隆方法,而且这个克隆方法需要对类的功能进行通盘考虑,这对全新的类来说不是很难,但对已有的类进行改造时,不一定是件容易的事。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值