zoukankan      html  css  js  c++  java
  • PrototypePattern(23种设计模式之一)


    设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒置原则 设计模式六大原则(4):接口隔离原则 设计模式六大原则(5):迪米特法则 设计模式六大原则(6):开闭原则

    PrototypePattern,UML抽象图百度找,代码实现如下

    使用原型设计模式设计一个克隆对象的过程。

    参与者接口

    package PrototypePattern;
    public interface Person extends Cloneable {
        public abstract Person createPerson();  
        public abstract String printPersonInfo();  
    }
    
    

    具体参与者类

    package PrototypePattern.Impl;
    import PrototypePattern.Person;
    public class BeautifulGirl implements Person {
        private String name;  
        private int height;  
    	public BeautifulGirl(String name, int height) {
    		this.name = name;
    		this.height = height;
    	}
    
    	public Person createPerson() {
    		BeautifulGirl girl = null; 
    		 try {
    			 girl = (BeautifulGirl)this.clone();  
    	     } catch (CloneNotSupportedException ex) {  
    	         ex.printStackTrace();  
    	     }  
    	     return girl;  
    	}
    	public String printPersonInfo() {
    		return "This beautiful girl's name is "+name+". she's height is "+height+".";
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public int getHeight() {
    		return height;
    	}
    	public void setHeight(int height) {
    		this.height = height;
    	}	
    }
    

    测试类

    package PrototypePattern;
    import PrototypePattern.Impl.BeautifulGirl;
    public class Test {
    
    	public static void main(String[] args) {
    		Person girl = new BeautifulGirl("wangzhaojun",170);  
    	    Person girl1 = girl.createPerson();  
    	    Person girl2 = girl.createPerson();  
    	    System.out.println(girl.printPersonInfo());  
    	    System.out.println(girl1.printPersonInfo());  
    	    System.out.println(girl2.printPersonInfo());
    	}
    }
    

    用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
    ####重点是: 1)克隆的对象与原对象不是同一个对象; 2)克隆对象与原对象的类型一样; 3)如果对象x的equals()方法定义恰当的话,那么x.clone().equals(x)应当是成立的。 ####工作原理: Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. ####实用性: 当要实例化的类是在运行时刻指定时,例如,通过动态装载;或者 为了避免创建一个与产品类层次平行的工厂类层次时;或者 当一个类的实例只能有几个不同状态组合中的一种时。 建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。 ####扩展 类名是一种束缚 如果硬是把类名塞到程序源代码类会发生什么问题?把程序中利用的类名写到里面不是理所当然的吗???? 面向对象程序设计的一个目的:“零件化复用”。当源代码里写下类名后,就无法跟该类分离了。必须紧密结合在一起的类名写到源代码内是理所当然的,根本不成问题;真正的问题是应该分离独立成零件的类名却被写到源代码里面了。
    别嫌弃我没写注释,这个代码很简单,注释省略,嘿嘿。
  • 相关阅读:
    通过Nginx,Tomcat访问日志(access log)记录请求耗时
    Nginx+Lua+Redis 对请求进行限制
    windows7+eclipse+hadoop2.5.2环境配置
    ubuntu + hadoop2.5.2分布式环境配置
    CentOS6.5上golang环境配置
    curl POST
    .sh 的运行
    CentOS 安装nginx
    Amazon ec2 改成密码登录方式
    SSH 服务器不用密码
  • 原文地址:https://www.cnblogs.com/1996jiwei/p/6498629.html
Copyright © 2011-2022 走看看