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

来源:互联网 发布:美国生活水平知乎 编辑:程序博客网 时间:2024/06/05 16:46

参考文档:

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);    }}


原创粉丝点击