zoukankan      html  css  js  c++  java
  • Builder

    package designPattern;

    //builder base class
    //为创建product的各个部件指定抽象接口
    class MazeBuilder{
        public void BuildMaze()
        {
            
        }
        public void BuildRoom(int n)
        {
            
        }
        public void BuildDoor(int roomFrom, int roomTo)
        {
            
        }
        public Maze GetMaze()
        {
            return null;
        }
        protected MazeBuilder()
        {
            
        }
    }

    //Director use builder
    //可以控制创建产品的过程
    class MazeGame2{
        public Maze CreateMaze(MazeBuilder builder)
        {
            builder.BuildMaze();
            
            builder.BuildRoom(1);
            builder.BuildRoom(2);
            builder.BuildDoor(1, 2);
            
            return builder.GetMaze();
        }
        
        public Maze CreateComplexMaze(MazeBuilder builder)
        {
            builder.BuildRoom(1);
            builder.BuildRoom(2);
            builder.BuildRoom(3);
            builder.BuildRoom(4);
            builder.BuildRoom(5);
            builder.BuildRoom(6);
            builder.BuildRoom(7);
            builder.BuildRoom(8);
            builder.BuildRoom(9);
            builder.BuildRoom(10);
            builder.BuildRoom(11);
            builder.BuildRoom(12);
            builder.BuildRoom(13);
            builder.BuildRoom(14);
            builder.BuildRoom(15);
            builder.BuildRoom(16);
            builder.BuildRoom(17);
            
            return builder.GetMaze();
        }
    }

    //derived builder
    //实现product的各个部件,并完成装配该产品个各部件
    //提供一个检索产品的接口
    class StandardMazeBuilder extends MazeBuilder{
        public void BuildMaze()
        {
            _currentMaze = new Maze();
        }
        public void BuildRoom(int n)
        {
            if (!_currentMaze.RoomNo(n))
            {
                Room room = new Room();
            }
            _currentMaze.AddRoom(room);
            room.SetSide(North, new Wall());
            room.SetSide(East, new Wall());
            room.SetSide(South, new Wall());
            room.SetSide(West, new Wall());
        }
        public void BuildDoor(int n1, int n2)
        {
            Room r1 = _currentMaze.RoomNo(n1);
            Room r2 = _currentMaze.RoomNo(n2);
            Door d = new Door(r1, r2);
            
            r1.SetSide(CommonWall(r1,r2), d);
            r2.SetSide(CommonWall(r2,r1), d);
        }
        public Maze GetMaze()
        {
            return _currentMaze;
        }
        private Direction CommanWall(Room r1, Room r2)
        {
            
        }
        
        private Maze _currentMaze;
    }
    class CountingMazeBuilder extends MazeBuilder{
        private int _doors;
        private int _rooms;
        
        public void BuildRoom(int n)
        {
            _rooms++;
        }
        public void BuildDoor(int n1, int n2)
        {
            _doors++;
        }
        
        public void GetCounts(int rooms, int doors)
        {
            rooms = _rooms;
            doors = _doors;
        }
    }
    public class Builder {

        public static void main(String[] args)
        {
            Maze maze;
            MazeGame game;
            StandardMazeBuilder builder;
            
            game.CreateMaze(builder);
            maze = builder.GetMaze();
            
            int rooms, doors;
            MazeGame game1;
            CountingMazeBuilder builder_c;
            
            game.CreateMaze(builder_c);
            builder_c.GetCount(rooms, doors);
        }
    }

  • 相关阅读:
    [转]写给刚工作的技术人员
    IT人士如何有效地学习
    一个学习Unity的网址,记下来以后用.
    .NET Remoting学习总结之一:Remoting的使用场景
    犯了不该犯的错:UNION和UNION ALL没搞清楚,今天写下它们的区别,要谨记在心!
    实用代码:单个读取Console中输入的键
    无意中试用了一下PostSharp,感觉很不错,看得出它对那些重复性的编程会有不少帮助.
    博客的搬迁历程
    .NET 6期 11月上旬教学计划(11月6日更新)
    .NET 6期 10月下旬教学计划(10月31日更新)
  • 原文地址:https://www.cnblogs.com/lidan/p/2239481.html
Copyright © 2011-2022 走看看