首页 > 学院 > 开发设计 > 正文

设计模式-原型模式

2019-11-10 17:57:38
字体:
来源:转载
供稿:网友

原型模式又称对象复制模式,浅拷贝的时候,一般采用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+ "的运动";	    }	    }}

 

 


上一篇:理解 R summary

下一篇:LEETCODE--Add Strings

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表