设计模式-原型模式

原型模式又称对象复制模式,浅拷贝的时候,一般采用Object类的clone()方法.

给出如下场景: 人做某种运动.

1.建立抽象类 人

2.建立抽象类 运动

3.建立场景管理类,通过管理类实现场景

java代码如下:

package com.liu.pattern6;

public class Prototype {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Manager.play(new Man("张三","15"), new Run("跑步"));
	}
	

}

class Manager{	

	public static void play(Person p,Activity a){
		
		Person p2 = (Person) p.clone();
		Activity a2 = (Activity)a.clone();
		
		System.out.println(p2.toString() + a2.toString());
		
	}
}

abstract class Person implements Cloneable {
	
	public Person(String name,String age){
		this.name =name;
		this.age = age;
	}
	
	private String name;

	private String age;

	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public String getAge() {
		return age;
	}
	
	public void setAge(String age) {
		this.age = age;
	}
	
	public Object clone(){
		try {
			return super.clone();
		} catch (CloneNotSupportedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}
	
	public abstract String toString();
}

class Man extends Person{

	public Man(String name, String age) {
		super(name, age);
		// TODO Auto-generated constructor stub
	}

	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return super.getName()+"("+super.getAge()+")";
	}
	
}


abstract class Activity implements Cloneable{
	
	public Activity(String name){
		this.name = name;
	}
	
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	public Object clone(){
		try {
			return super.clone();
		} catch (CloneNotSupportedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}
	
	public abstract String toString();
}

class Run extends Activity{

	public Run(String name) {
		super(name);
		// TODO Auto-generated constructor stub
	}

	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "在进行"+super.getName()+"的运动";
	}
	
}


 

c#代码如下:

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

namespace com.liu.pattern6
{
    class Prototype
    {
        static void Main(string[] args)
        {
            Manager.play(new Man("张三", "15"), new Run("跑步"));
        }
    }


    class Manager
    {

        public static void play(Person p, Activity a){
		
		Person p2 = (Person) p.clone();
		Activity a2 = (Activity)a.clone();
		
		System.Console.WriteLine(p2.toString() + a2.toString());
        System.Console.ReadKey();
		
	    }
    }

    abstract class Person {
	
        private String _name;
        private String _age;

        public String Name{
            set{
                _name = value; 
            }
            get{
                return _name;
            }
        }

        public String Age{
            set{
                _age = value; 
            }
            get{
                return _age;
            }
        }

	    public Person(String name,String age){
		    Name =name;
		    Age = age;
	    }
	
	    public Object clone(){
            return base.MemberwiseClone();
	    }
	
	    public abstract String toString();
    }

    class Man : Person{

	    public Man(String name, String age):base(name,age) {

	    }

	    public override String toString() {
		    // TODO Auto-generated method stub
		    return base.Name+"("+base.Age+")";
	    }
	
    }

    abstract class Activity{
	    
	    public Activity(String name){
		    Name = name;
	    }
	
	    private String _name;

        public String Name {
            set { _name = value; }
            get { return _name; }
        }
	
	    public Object clone(){
            return base.MemberwiseClone();
	    }
	
	    public abstract String toString();
    }

    class Run : Activity{

	    public Run(String name):base(name) {
		    // TODO Auto-generated constructor stub
	    }
        public override String toString()
        {
		    // TODO Auto-generated method stub
            return "在进行" + base.Name+ "的运动";
	    }
	
    }
}



 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值