• 原型模式


    原型模式

    原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。

    这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。


    1、创建Cloneable 接口的抽象类

     1 public abstract class Hero implements Cloneable {
     2     private String id;
     3     protected String name;
     4 
     5     abstract void behavior();
     6 
     7     public Object clone() {
     8         Object clone = null;
     9         try {
    10             clone = super.clone();
    11         } catch (CloneNotSupportedException e) {
    12             e.printStackTrace();
    13         }
    14         return clone;
    15     }
    16 
    17     public String getId() {
    18         return id;
    19     }
    20 
    21     public void setId(String id) {
    22         this.id = id;
    23     }
    24 
    25     public String getName() {
    26         return name;
    27     }
    28 
    29     public void setName(String name) {
    30         this.name = name;
    31     }
    32 }
    Hero

    2、创建实体类

    1 public class Ashe extends Hero {
    2     public Ashe(){
    3         name = "Ashe";
    4     }
    5     @Override
    6     void behavior() {
    7         System.out.println("Ashe is coming!");
    8     }
    9 }
    Ashe
     1 public class Galen extends Hero {
     2     public  Galen(){
     3         name = "Glaen";
     4     }
     5 
     6     @Override
     7     void behavior() {
     8         System.out.println("Galen is coming!");
     9     }
    10 }
    Galen
    1 public class Ryze extends Hero{
    2     public Ryze(){
    3         name = "Ryze";
    4     }
    5     @Override
    6     void behavior() {
    7         System.out.println("Ryze is coming!");
    8     }
    9 }
    Ryze

    3、通过Hashtable 创建缓存类

    (从数据库获取实体类,并把它们存储在一个 Hashtable 中)

     1 import java.util.Hashtable;
     2 
     3 public class HeroCache {
     4     public static Hashtable<String,Hero> heroMap = new Hashtable<>();
     5 
     6     public static Hero getHero(String HeroId){
     7         Hero hero = heroMap.get(HeroId);
     8         return  (Hero)hero.clone();
     9     }
    10 
    11     public static void loadCache(){
    12         Ashe ashe = new Ashe();
    13         ashe.setId("1");
    14         heroMap.put(ashe.getId(),ashe);
    15 
    16         Galen galen = new Galen();
    17         galen.setId("2");
    18         heroMap.put(galen.getId(),galen);
    19 
    20         Ryze ryze = new Ryze();
    21         ryze.setId("3");
    22         heroMap.put(ryze.getId(),ryze);
    23 
    24     }
    25 }
    HeroCache

    4、测试类

     1 public class PrototypePatternDemo {
     2     public static void main(String[] args) {
     3         HeroCache.loadCache();
     4 
     5         Hero cloneHero1 = HeroCache.getHero("1");
     6         cloneHero1.behavior();
     7         Hero cloneHero2 = HeroCache.getHero("2");
     8         cloneHero2.behavior();;
     9         Hero cloneHero3 = HeroCache.getHero("3");
    10         cloneHero3.behavior();
    11     }
    12 }
    PrototypePatternDemo

    5、测试结果

    Ashe is coming!
    Galen is coming!
    Ryze is coming!
    View Code

     

  • 相关阅读:
    Linux文件权限详解
    linux软链接和硬链接的区别
    linux vi编辑常用命令
    juery下拉刷新,div加载更多元素并添加点击事件(二)
    性能调优常见问题与方案
    测试人员怎么避免背黑锅?
    测试部工作检查观点
    如何为一组任务确定计划,估计每个任务所需的时间?
    测试人员和开发人员如何更高效的配合工作
    测试人员职业规划
  • 原文地址:https://www.cnblogs.com/hoje/p/11929275.html
Copyright © 2020-2023  润新知