• GoF23种设计模式之创建型模式之原型模式


    一、概述

            用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

    二、适用性

    1.当一个系统应该独立于它的产品创建、构成和表示的时候。

    2.当要实例化的类是在运行时刻指定的时候,例如:通过动态装载。

    3.为了避免创建一个与产品类层次平行的工厂类层次的时候。

    4.当一个类的实例只能有几个不同状态组合中的一种的时候。

            建立相应数目的原型并克隆它们可能要比每次用合适的状态手工实例化该类更方便一些。

    三、参与者

    1.Prototype:声明一个克隆自身的接口。

    2.ConcretePrototype:实现一个克隆自身的操作。

    3.Client:让一个原型克隆自身从而创建一个新的对象。

    四、类图

    五、示例

    Prototype

    [java] view plain copy
     
     print?
    1. package cn.lynn.prototype;  
    2.   
    3. public class Snake implements Cloneable {  
    4.   
    5.     private String name;  
    6.   
    7.     public String getName() {  
    8.         return name;  
    9.     }  
    10.   
    11.     public void setName(String name) {  
    12.         this.name = name;  
    13.     }  
    14.   
    15.     public Object clone() {  
    16.         try {  
    17.             return super.clone();  
    18.         } catch (Exception e) {  
    19.             e.printStackTrace();  
    20.             return null;  
    21.         }  
    22.     }  
    23.   
    24. }  
    ConcretePrototype
    [java] view plain copy
     
     print?
    1. package cn.lynn.prototype;  
    2.   
    3. public class WhiteSnake extends Snake {  
    4.   
    5.     public WhiteSnake(String name) {  
    6.         setName(name);  
    7.     }  
    8.   
    9. }  
    Client
    [java] view plain copy
     
     print?
    1. package cn.lynn.prototype;  
    2.   
    3. public class Client {  
    4.   
    5.     public static void main(String[] args) {  
    6.         Snake snake1 = new WhiteSnake("我是白素贞");  
    7.         Snake snake2 = (Snake) snake1.clone();  
    8.         System.out.println(snake1.getName());  
    9.         System.out.println(snake2.getName());  
    10.     }  
    11.   
    12. }  
    Result
    [java] view plain copy
     
     print?
    1. 我是白素贞  
    2. 我是白素贞  
  • 相关阅读:
    使用 RetroShare 分享资源
    C# 代码占用的空间
    C# 代码占用的空间
    PHP date_timezone_set() 函数
    PHP date_timezone_get() 函数
    PHP date_timestamp_set() 函数
    PHP date_timestamp_get() 函数
    PHP date_time_set() 函数
    MHA软件下载地址
    [ZJOI2019]线段树
  • 原文地址:https://www.cnblogs.com/huangwentian/p/7471560.html
Copyright © 2020-2023  润新知