设计模式(Design Pattern) - 创建型模式(Creational Pattern) - 原型模式(Prototype) - Java实现

设计模式(Design Pattern) - 创建型模式(Creational Pattern) - 原型模式(Prototype)
用原型实例指定创建对象的种类,并且通过复制这些原型,创建新的对象。

1、简单原型

1.1、说明:
(1)Prototype 产品抽象原型.接口;
(2)PrototypeA 原型.实现类;
(3)PrototypeB 原型.实现类。

1.2、Java实现,代码如下:
(1)Prototype

package com.java.designPattern.prototype.simplePrototype;

/**
 * 抽象原型(接口)
 *
 */
public abstract class Prototype implements Cloneable {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

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

}

(2)PrototypeA

package com.java.designPattern.prototype.simplePrototype;

/**
 * 具体原型.实现类
 *
 */
public class PrototypeA extends Prototype {

    public PrototypeA() {
        setName("prototpye A");
    }

}

(3)PrototypeB

package com.java.designPattern.prototype.simplePrototype;

/**
 * 具体原型.实现类
 *
 */
public class PrototypeB extends Prototype {

    public PrototypeB() {
        setName("prototpye B");
    }

}

(4)Test

package com.java.designPattern.prototype.simplePrototype;

/**
 * 测试类
 *
 */
public class Test {

    public static void main(String[] args) {
        Prototype prototypeA = new PrototypeA();
        System.out.println(prototypeA.getName());

        Prototype prototypeB = new PrototypeB();
        System.out.println(prototypeB.getName());
    }

}

输出:
prototpye A
prototpye B

2、有管理器的原型

2.1、说明:
(1)Prototype 产品抽象原型.接口;(同1)
(2)PrototypeA 原型.实现类;(同1)
(3)PrototypeB 原型.实现类;(同1)
(4)PrototypeManager 原型管理器。

2.2、Java实现,代码如下:
(1)Prototype
(2)PrototypeA
(3)PrototypeB
(4)PrototypeManager

package com.java.designPattern.prototype.prototypeManager;

import java.util.HashMap;
import java.util.Map;

/**
 * 原型管理器
 *
 */
public class PrototypeManager {

    private static Map<String, Prototype> map = new HashMap<String, Prototype>();

    private PrototypeManager() {
    }

    public synchronized static void setPrototype(String id, Prototype prototype) {
        map.put(id, prototype);
    }

    public synchronized static Prototype getPrototype(String id) {
        return map.get(id);
    }

    public synchronized static void removePrototype(String id) {
        map.remove(id);
    }

}

(5)Test

package com.java.designPattern.prototype.prototypeManager;

/**
 * 测试类
 *
 */
public class Test {

    public static void main(String[] args) {
        Prototype prototypeA = new PrototypeA();
        Prototype prototypeB = new PrototypeB();
        PrototypeManager.setPrototype("a", prototypeA);
        PrototypeManager.setPrototype("b", prototypeB);

        System.out.println(PrototypeManager.getPrototype("a").getName());
        System.out.println(PrototypeManager.getPrototype("b").getName());
    }

}

输出:
prototpye A
prototpye B

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值