参考文档:
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); } }