原型模式(Prototype)(创建型模式)

参考文档:

1.设计模式-可复用面向对象软件的基础

2.http://www.cnblogs.com/itTeacher/archive/2012/12/02/2797857.html(Java设计模式四: 原型模式(Prototype Pattern))


原型模式(Prototype)(创建型模式)

理论方面的知识可以参考参考文档;

看看prototype的格式:



代码实现:

MazePrototypeFactory.java:
package com.rick.designpattern.prototype;

/**
 * Created by MyPC on 2017/6/22.
 */
public class MazePrototypeFactory extends MazeFactory {
    private Maze _prototypeMaze;
    private Wall _prototypeWall;
    private Room _prototypeRoom;
    private Door _prototypeDoor;

    public MazePrototypeFactory(Maze maze, Wall wall, Room room, Door door) {
        this._prototypeMaze = maze;
        this._prototypeWall = wall;
        this._prototypeRoom = room;
        this._prototypeDoor = door;
    }

    public Maze makeMaxe() {
        return new Maze();
    }

    public Wall makeWall() {
        return _prototypeWall.clone();
    }

    public Room makeRoom(int n) {
        return new Room(n);
    }

    public Door makeDoor(Room r1, Room r2) {
        Door door = _prototypeDoor.clone();
        door.initialize(r1, r2);
        return door;
    }

}
Wall.java:
package com.rick.designpattern.prototype;

/**
 * 墙
 * <p>
 * Created by MyPC on 2017/6/20.
 */
public class Wall {

    public Wall() {

    }

    public Wall(Wall other) {
        
    }

    public Wall clone() {
        return new Wall(this);
    }
}
Door.java:
package com.rick.designpattern.prototype;

/**
 * 门
 * <p>
 * Created by MyPC on 2017/6/20.
 */
public class Door {
    private Room r1, r2;

    public Door() {

    }

    public Door(Door other) {
        r1 = other.r1;
        r2 = other.r2;
    }

    public void initialize(Room r1, Room r2) {
        this.r1 = r1;
        this.r2 = r2;
    }

    public Door clone() {
        return new Door(this);
    }

    public Door(Room r1, Room r2) {
        this.r1 = r1;
        this.r2 = r2;
    }
}
BombedWall.java:
package com.rick.designpattern.prototype;

/**
 * Created by MyPC on 2017/6/20.
 */
public class BombedWall extends Wall {
    private boolean _bomb;

    public BombedWall() {
    }

    public BombedWall(BombedWall other) {
        _bomb = other._bomb;
    }

    public BombedWall clone() {
        return new BombedWall(this);
    }
}
Client.java:
package com.rick.designpattern.prototype;

/**
 * Created by MyPC on 2017/6/20.
 */
public class Client {

    public static void main(String[] args) {
        MazeGame mazeGame = new MazeGame();
        MazePrototypeFactory mazePrototypeFactory =
                new MazePrototypeFactory(new Maze(), new Wall(), new Room(1), new Door());

        mazeGame.createMaze(mazePrototypeFactory);

        MazePrototypeFactory mazePrototypeFactory2 =
                new MazePrototypeFactory(new Maze(), new BombedWall(), new RoomWithABomb(1), new Door());

        mazeGame.createMaze(mazePrototypeFactory2);
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值