设计模式-原型模式
来源:互联网 发布:windows 预览计划 编辑:程序博客网 时间:2024/06/11 17:20
原型模式又称对象复制模式,浅拷贝的时候,一般采用Object类的clone()方法.
给出如下场景: 人做某种运动.
1.建立抽象类 人
2.建立抽象类 运动
3.建立场景管理类,通过管理类实现场景
java代码如下:
package com.liu.pattern6;public class Prototype {public static void main(String[] args) {// TODO Auto-generated method stubManager.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 blocke.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}@Overridepublic String toString() {// TODO Auto-generated method stubreturn 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 blocke.printStackTrace();}return null;}public abstract String toString();}class Run extends Activity{public Run(String name) {super(name);// TODO Auto-generated constructor stub}@Overridepublic String toString() {// TODO Auto-generated method stubreturn "在进行"+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+ "的运动"; } }}
0 0
- 设计模式:原型模式
- 设计模式------原型模式
- 设计模式 原型模式
- 设计模式-【原型模式】
- 设计模式-原型模式
- 设计模式-原型模式
- 设计模式-原型模式
- 设计模式-原型模式
- 设计模式- 原型模式
- 设计模式:原型模式
- 设计模式 - 原型模式
- 设计模式-原型模式
- 【设计模式】原型模式
- 设计模式-原型模式
- 设计模式-原型模式
- 【设计模式】原型模式
- 设计模式----原型模式
- 设计模式------原型模式
- spark ml 聚类源码笔记一
- C++ 单例职责
- 约瑟夫环
- 关于在Linux上安装solr遇到404的问题
- linux:解决SSH连接Linux超时自动断开
- 设计模式-原型模式
- leetcode 64. Minimum Path Sum
- WebRtc重要概念
- javaScript的调试(三)
- 装饰者模式
- 基于Ceph快照的异地灾备设计
- 初学JavaScript的基本语法介绍(二)
- Error:Java home supplied via 'org.gradle.java.home' is invalid
- 我的PAT乙级练习题1003代码记录