<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Chan Chen Coding...

    Three: Prototype Design

    Prototype Definition

    Specify the kinds of objects to create using a prototypical instance, and create new objects by copying this prototype.

    Class Diagram

    Builder

    Participants

    • Prototype
      • declares an interface for cloning itself.
    • ConcretePrototype.
      • implements an operation for cloning itself.
    • Client.
      • creates a new object by asking a prototype to clone itself.

    Example: Product Cache

    When object instantiation is a lot more expensive than cloning, Prototype pattern may offer a useful optimization technique.

    Example assumptions:

    • An e-commerce application gathers product information trough complex queries against a legacy database.
    • The legacy database is updated at predefined intervals which are known.
    • The number of products allows caching with a reasonable memory consumption.

    When a user asks for information for a certain product the application could gather that information in two ways:

    1. execute the complex query against legacy database, gather the information, and instantiate the object.
    2. instantiate the objects at predefined intervals and keep them in a cache, when an object is requested, it is retrieved from cache and cloned. When the legacy database is updated, discard the content of the cache and re-load with new objects.

    The second approach is based on Prototype pattern and it is illustrated below:

    Example: Class Diagram

    Prototype Example

    Example: Java sample code

        public abstract class Product implements Cloneable {
            
    private String SKU;
            
    private String description;    
            
            
    public Object clone() {
                Object clone 
    = null;
                
    try {
                    clone 
    = super.clone();
                } 
    catch (CloneNotSupportedException e) {
                    e.printStackTrace();
                }
                
    return clone;
            }
            
    public String getDescription() {
                
    return description;
            }
            
    public String getSKU() {
                
    return SKU;
            }
            
    public void setDescription(String string) {
                description 
    = string;
            }
            
    public void setSKU(String string) {
                SKU 
    = string;
            }
        }
        
    public class Book extends Product {
            
    private int numberOfPages;

            
    public int getNumberOfPages() {
                
    return numberOfPages;
            }
            
    public void setNumberOfPages(int i) {
                numberOfPages 
    = i;
            }
        }
        
    public class DVD extends Product {
            
    private int duration;

            
    public int getDuration() {
                
    return duration;
            }
            
    public void setDuration(int i) {
                duration 
    = i;
            }
        }
        
    import java.util.*;
        
    public class ProductCache {
            
    private static Hashtable productMap = new Hashtable();

            
    public static Product getProduct(String productCode) {
                Product cachedProduct 
    = (Product) productMap.get(productCode);
                
    return (Product) cachedProduct.clone();
            }

            
    public static void loadCache() {
                
    // for each product run expensive query and instantiate product
                
    // productMap.put(productKey, product);
                
    // for exemplification, we add only two products
                Book b1 = new Book();
                b1.setDescription(
    "Oliver Twist");
                b1.setSKU(
    "B1");
                b1.setNumberOfPages(
    100);
                productMap.put(b1.getSKU(), b1);
                DVD d1 
    = new DVD();
                d1.setDescription(
    "Superman");
                d1.setSKU(
    "D1");
                d1.setDuration(
    180);
                productMap.put(d1.getSKU(), d1);
            }
        }
        
    public class Application {
            
    public static void main(String[] args) {
                ProductCache.loadCache();

                Book clonedBook 
    = (Book) ProductCache.getProduct("B1");
                System.out.println(
    "SKU = " + clonedBook.getSKU());
                System.out.println(
    "SKU = " + clonedBook.getDescription());
                System.out.println(
    "SKU = " + clonedBook.getNumberOfPages());

                DVD clonedDVD 
    = (DVD) ProductCache.getProduct("D1");
                System.out.println(
    "SKU = " + clonedDVD.getSKU());
                System.out.println(
    "SKU = " + clonedDVD.getDescription());
                System.out.println(
    "SKU = " + clonedDVD.getDuration());
            }
        }

    Benefits

    • Adding and removing products at runtime.
    • Specifying new objects by varying values.
    • Specifying new objects by varying structure.
    • Reduced subclassing.
    • Configuring an application with classes dinamincally.

    Usage

    • When the classes to instantiate are specified at run time.
    • When you want to avoid building a class hierarchy of factories that parallels the class hierarchy of products.
    • When instances of a class can have one of only a few combinations of state.


    -----------------------------------------------------
    Silence, the way to avoid many problems;
    Smile, the way to solve many problems;

    posted on 2012-10-26 14:30 Chan Chen 閱讀(228) 評論(0)  編輯  收藏 所屬分類: Design Pattern

    主站蜘蛛池模板: 真实国产乱子伦精品免费| aa级女人大片喷水视频免费| 美女在线视频观看影院免费天天看 | 4虎1515hh永久免费| 亚洲AV色香蕉一区二区| 两个人看的www高清免费观看| 久久亚洲精品无码播放| 三年在线观看免费观看完整版中文| 亚洲一区爱区精品无码| 好紧我太爽了视频免费国产| 亚洲va在线va天堂va不卡下载| 亚洲视频在线观看免费| 亚洲天堂一区二区三区| 永久中文字幕免费视频网站| 亚洲AV综合色区无码一二三区| 四虎永久免费观看| 无码免费又爽又高潮喷水的视频 | 亚洲热妇无码AV在线播放| 两性色午夜视频免费播放| 亚洲国产老鸭窝一区二区三区| 1000部拍拍拍18勿入免费视频下载| 亚洲伊人久久大香线蕉影院| 免费黄色网址入口| 一级做a毛片免费视频| 亚洲Aⅴ无码专区在线观看q| 四虎在线最新永久免费| 成人亚洲国产精品久久| 自拍偷自拍亚洲精品情侣| 美女视频黄的全免费视频网站| 亚洲av纯肉无码精品动漫| 国产亚洲人成A在线V网站| 在线美女免费观看网站h| 亚洲女子高潮不断爆白浆| 亚洲日本中文字幕天堂网| 8x8x华人永久免费视频| 久久亚洲欧美国产精品| 亚洲国产精品无码久久一线 | 可以免费观看的毛片| 99久久婷婷国产综合亚洲| 久久亚洲欧洲国产综合| 免费精品国产日韩热久久|