zoukankan      html  css  js  c++  java
  • 1.4(设计模式)原型模式

    原型模式,通过拷贝创建好的实例对象来创建对象,用于创建重复的对象,同时保持性能。 

    先将Shpae抽象类实现Cloneable接口,重写clone方法,用于克隆对象。

    Circle类继承Shape抽象类。

    ShapeCache中的load方法创建实例,并将实例放入HashMap。

    后续获取对象,通过对象的key从HashMap中获取对象,并调用clone方法返回拷贝对象。

    Shape抽象类,实现clone方法,克隆对象。

    public abstract class Shape implements Cloneable{
        private String id;
        protected String type;    
        
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getType() {
            return type;
        }
    
        public void setType(String type) {
            this.type = type;
        }
    
        public abstract void draw();
            
        @Override
        protected Shape clone() throws CloneNotSupportedException {
            // TODO Auto-generated method stub
            return (Shape) super.clone();
        }
    }

     Circle  ,Shape的子类

    public class Circle extends Shape{
        
        public Circle(){
            type = "circle";
        };
            
        @Override
        public void draw() {
            System.out.println("draw circle");
        }
    }

     ShapeCache用于加载实例、获取对象并返回其克隆对象。

    import java.util.HashMap;
    import java.util.Map;
    
    public class ShapeCache {
        private static Map<String,Shape> shapeCache = new HashMap<String,Shape>();
        
        public static Shape getShape(String id) throws CloneNotSupportedException {
            return shapeCache.get(id).clone();
        }
        
        public static void loadShape() {
            Shape circle = new Circle();
            circle.setId("1");
            shapeCache.put(circle.getId(), circle);
        }
    }

     测试:

    public class Main {
    
        public static void main(String[] args) throws CloneNotSupportedException {
            ShapeCache.loadShape();
            Shape circle = ShapeCache.getShape("1");
            circle.draw();
            System.out.println(circle.type);
        }
    }
    运行结果:
    draw circle
    circle

    参考资料:

    详解Java中的clone方法 — 原型模式

  • 相关阅读:
    Linux内核分析 期中总结
    Linux内核分析第四章读书笔记
    Linux内核分析作业 NO.8 完结撒花~~~
    Linux内核分析作业 NO.7
    Linux内核分析第三章读书笔记
    Linux内核分析作业 NO.6
    20145124 《Java程序设计》课程总结
    20145124 陈威名 关于同学们第七周博客后的问题汇总和小结
    20145124实验五 Java网络编程及安全
    20145124 《Java程序设计》第10周学习总结
  • 原文地址:https://www.cnblogs.com/huang-changfan/p/10725975.html
Copyright © 2011-2022 走看看