原型设计模式

版权声明:本文为博主原创文章,未经博主允许不得转载。博客地址:http://blog.csdn.net/yy763496668 https://blog.csdn.net/yy763496668/article/details/78216845

这里写图片描述

原型设计模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建的对象。其实就是小红一个对象再创建一个对象,而且不需要知道任何创建的细节

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 原型模式
{
    /// <summary>
    /// 深克隆
    /// 重新构造对象  并把原有对象的所有信息赋值给新对象
    /// 浅克隆
    /// 只克隆原有对象的值类型,克隆引用类型的引用(新对象和原有对象引用类型地址一样)
    /// </summary>
    /// 
    class Driver
    {
        private string name;

        public string Name
        {
            get
            {
                return name;
            }

            set
            {
                name = value;
            }
        }
    }

    class Car:ICloneable
    {
        private float speed;
        private Driver _driver;

        public float Speed
        {
            get
            {
                return speed;
            }

            set
            {
                speed = value;
            }
        }

        internal Driver Driver
        {
            get
            {
                return _driver;
            }

            set
            {
                _driver = value;
            }
        }

        public object Clone()
        {
            //浅克隆
            //浅克隆只能克隆对象中的值类型
            //return this.MemberwiseClone();

            //深克隆
            Car car = new Car();
            car.speed = speed;
            car.Driver = new Driver();
            car.Driver.Name = Driver.Name;

            return car;
        }

        public void Move()
        {
            Console.WriteLine("{0}驾驶的汽车时速是:{1}",Driver.Name,Speed);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Car car = new Car();
            car.Speed = 5;
            car.Driver = new Driver();
            car.Driver.Name = "张三";

            Car car2 = car.Clone() as Car;
            car2.Driver.Name = "李四";
            //car2.Speed = 15;

            car.Move();
            car2.Move();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/yy763496668/article/details/78216845