Java весна 2013 лекция 4

242 views

Published on

Published in: Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
242
On SlideShare
0
From Embeds
0
Number of Embeds
57
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Java весна 2013 лекция 4

  1. 1. FrontendImpl используем только вместе с оператором new! Frontend frontend = new FrontendImpl(…); Во всех классах и методах используем только интерфейс Frontend Аналогично для всех классов и интерфейсов Если какая-то функция из Impl должны быть вызвана «снаружи» объявляйте ее в интерфейсе
  2. 2. Переименовываем Frontend в FrontendImpl Создаем пустой интерфейс Frontend FrontendImpl implements Frontend Компилируем, видим что ничего не изменилось Меняем везде (кроме new) FrontendImpl на Frontend Компилляция не проходит Добавляем в Frontend все нужные обявления методов
  3. 3. public interface Frontend extends Abonent { MessageSystem getMessageSystem(); void setId(Integer sessionId, Integer userId); } public interface AccountService extends Abonent { MessageSystem getMessageSystem(); Integer getUserId(String name); }
  4. 4. public void run(){ while(true){ messageSystem.execForAbonent(this); //обработка сообщений removeDeadUsers(); //убираем «мертвых» пользователей TimeHelper.sleep(SLEEP_PERIOD); //ждем сообщений } }
  5. 5.
  6. 6.
  7. 7. final private Map<Integer, GameSession> userToSessions = new HashMap<Integer, GameSession>(); public void run(){ while(true){ processMessages(); doGMStep(); replicateGamesToFrontend(); TimeHelper.sleep(SLEEP_TIME); } } processMessages() – обработка сообщений от Frontend (команды пользователей) doGMStep() – расчет изменений не связанных с текущими командами пользователей replicateGamesToFrontend() – отправка на Frontend изменений User Session
  8. 8. processMessages() doGMStep() replicate () processMessages() doGMStep() replicate () … …
  9. 9.
  10. 10. ― ― ― ― ―
  11. 11. ― ― ― ―
  12. 12.
  13. 13. 18. Распределение классов по пакетам. Циклические зависимости между пакетами 19. Архитектура игрового сервера. Схема зависимостей модулей 20. Процесс работы игрового сервера, репликация
  14. 14. interface Unit{ void move(Direction direction); void attack(Target target); … } class Group implements Unit{ private List<Unit> units; … void add(Unit unit){…} void remove(Unit unit){…} }
  15. 15. class UnitImpl … { private Weapon weapon = new WeaponImpl(); //default value private Armor armor = new ArmorImpl (); //default value private Gear gear = new GearImpl (); //default value void setWeapon(Weapon weapon){…} void setArmor(Armor armor){…} void setGear(Gear gear){…} } abstract class UnitBuilder { protected UnitImpl unit; public Unit getUnit(){return unit;} public createUnit(){ this.unit = new UnitImpl(); } public abstract assembleWeapon(); public abstract assembleArmor(); public abstract assembleGear(); }
  16. 16. class T3485Builder extends UnitBuilder { public void assembleWeapon() {this.unit.setWeapon(new D5T85BM());} public void assembleArmor() {this.unit.setWeapon(new A45());} public void assembleGear() {this.unit.setWeapon(new T348560());} } class TigerPzKpfwVIBuilder extends UnitBuilder { public void assembleWeapon() {this.unit.setWeapon(new KwK105cm42L28());} public void assembleArmor() {this.unit.setWeapon(new A45());} public void assembleGear() {this.unit.setWeapon(new T348560());} }
  17. 17. class UnitFactory { private UnitBuilder unitBuilder; public void setBuilder(UnitBuilder currentBuilder){this.unitBuilder = currentBuilder;} public Unit getUnit(){return unitBuilder.getUnit();} public void constructUnit(){ unitBuilder.createUnit(); unitBuilder. assembleWeapon(); unitBuilder. assembleArmor(); unitBuilder. assembleGear(); } }
  18. 18. interface DamageVisitor{ void visit(Weapon weapon); void visit(Armor armor); void visit(Gear gear); } interface UnitPart{ void accept(DamageVisitor visitor); }
  19. 19. class Weapon implements UnitPart{ … void accept(DamageVisitor visitor){ visitor.visit(this); } … } class UnitImpl { private UnitPart[] parts; public void accept(DamageVisitor visitor){ for(UnitPart part : parts){ part.accept(visitor); } } }
  20. 20. class FireDamage implements DamageVisitor{ public void visit(Weapon weapon){…} public void visit(Armor armor){…} public void visit(Gear gear){…) } class EMPDamage implements DamageVisitor{ public void visit(Weapon weapon){…} public void visit(Armor armor){…} public void visit(Gear gear){…) } class ProjectileDamage implements DamageVisitor{ public void visit(Weapon weapon){…} public void visit(Armor armor){…} public void visit(Gear gear){…) }

×