原型模式

Posted frank9571

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原型模式相关的知识,希望对你有一定的参考价值。

我理解的原型模式就是将对象都创建好并且缓存下来,当你需要其中的对象的时候直接clone下来,不需要new这个过程。

但是其中很多细节

(1)首先定义基类的时候要继承Cloneable接口,重写其中的clone方法,但是clone方法返回的并不是你想要的Item类,所以强制转换也是其中的一个细节

 1 public abstract class Item implements Cloneable {//1
 2     private String  ketId;
 3     protected String itemName;
 4 
 5     public String getKetId() {
 6         return ketId;
 7     }
 8 
 9     public void setKetId(String ketId) {
10         this.ketId = ketId;
11     }
12 
13     public String getItemName() {
14         return itemName;
15     }
16     public Item clone(){//2
17         try {
18             return (Item) super.clone();//3
19         } catch (CloneNotSupportedException e) {
20             e.printStackTrace();
21         }
22         return null;
23     }
24 
25 }

(2)然后定义两个继承了Item的派生类

Adidas

1 public class Adidas extends Item {
2     public Adidas(){
3         this.itemName = "Adidas";
4     }
5 }

 

Nike

1 public class Nike extends Item {
2     public Nike(){
3         this.itemName = "Nike";
4     }
5 }

 

(3)然后定义缓存类

缓存类里面用一个HashTable来作为存储方式

 1 public class ItemCache {
 2     private static Hashtable<String, Item> itemMap =
 3             new Hashtable<String,Item>();
 4 
 5     public static Item getItem(String keyId){
 6         Item item = itemMap.get(keyId);
 7         return (Item) item.clone();
 8     }
 9   //缓存方法
10     public static void addItem(){
11         Adidas adidas = new Adidas();
12         adidas.setKetId("1");
13         itemMap.put( adidas.getKetId(), adidas);
14 
15         Nike nike = new Nike();
16         nike.setKetId("2");
17         itemMap.put(nike.getKetId(), nike);
18     }
19 
20 }

 

(4)测试类

首先要先进行缓存,也就是调用缓存类中的缓存方法,还有HashTable查询出来的兑现也要强制转换

1 public class PrototypeDemo {
2     public static void main(String[] args) {
3         ItemCache.addItem();//1
4 
5         Adidas adidas = (Adidas) ItemCache.getItem("1");//2
6         System.out.println("Adidas:" + adidas.getItemName());
7     }
8 }

以上是关于原型模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式之原型模式(Prototype)详解及代码示例

设计模式课程 设计模式精讲 9-2 原型模式coding

设计模式--原型模式

5.原型模式

设计模式原型模式

csharp 设计模式 - 原型 - 结构代码