安卓系列之设计模式:原型模式

103 阅读1分钟

定义

用于创建重复对象,属于创建型模式。

应用场景

当代码不应该依赖于需要复制的对象的具体类时

优点

1.避免重复初始化对象 2.方便复制对象 3.提高性能

缺点

对象需要实现Cloneable接口。

具体实现

抽象类

package com.elaine.testpattern.prototype;

/**
 * 颜色抽象类
 * <p>
 * author: elaine
 * date: 2021/4/30
 */
public abstract class Color implements Cloneable {
    private int id;
    protected String type;

    abstract void fill();

    public String getType() {
        return type;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public Object clone() {
        Object object = null;
        try {
            object = super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return object;
    }
}

具体类

红色对象

package com.elaine.testpattern.prototype;

import android.util.Log;

/**
 * 红色
 * author: elaine
 * date: 2021/4/30
 */
public class RedColor extends Color {

    public RedColor() {
        type = "red";
    }

    @Override
    void fill() {
        Log.e("color====""fill=====red");
    }
}

绿色对象

package com.elaine.testpattern.prototype;

import android.util.Log;

/**
 * 绿色
 * author: elaine
 * date: 2021/4/30
 */
public class GreenColor extends Color {

    public GreenColor() {
        type = "green";
    }

    @Override
    void fill() {
        Log.e("color====""fill=====green");
    }
}

白色对象

package com.elaine.testpattern.prototype;

import android.util.Log;

/**
 * 白色
 * author: elaine
 * date: 2021/4/30
 */
public class WhiteColor extends Color {

    public WhiteColor() {
        type = "white";
    }

    @Override
    void fill() {
        Log.e("color====""fill=====white");
    }
}

缓存管理

package com.elaine.testpattern.prototype;

import java.util.Hashtable;

/**
 * 颜色缓存
 * author: elaine
 * date: 2021/4/30
 */
public class ColorCache {

    private static Hashtable<Integer, Color> colorHashtable = new Hashtable<>();

    public static Color getColor(int id) {
        Color color = colorHashtable.get(id);
        return (Color) color.clone();
    }

    public static void loadCache() {
        RedColor redColor = new RedColor();
        redColor.setId(1);
        colorHashtable.put(redColor.getId(), redColor);

        GreenColor greenColor = new GreenColor();
        greenColor.setId(2);
        colorHashtable.put(greenColor.getId(), greenColor);

        WhiteColor whiteColor = new WhiteColor();
        whiteColor.setId(3);
        colorHashtable.put(whiteColor.getId(), whiteColor);
    }
}

运行代码

    private void use() {
        ColorCache.loadCache();

        Color red = ColorCache.getColor(1);
        red.fill();
        Log.e("color===", red.getType());

        Color green = ColorCache.getColor(2);
        green.fill();
        Log.e("color===", green.getType());

        Color white = ColorCache.getColor(3);
        white.fill();
        Log.e("color===", white.getType());
    }

运行结果

图片

若帅哥美女对该系列文章感兴趣,可微信搜索公众号(木子闲集)关注更多更新文章哦,谢谢~