• Like
Java весна 2013 лекция 4
Upcoming SlideShare
Loading in...5
×

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

  • 128 views
Uploaded on

 

More in: Technology , Business
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
128
On Slideshare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
0
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. FrontendImpl используем только вместе с оператором new! Frontend frontend = new FrontendImpl(…); Во всех классах и методах используем только интерфейс Frontend Аналогично для всех классов и интерфейсов Если какая-то функция из Impl должны быть вызвана «снаружи» объявляйте ее в интерфейсе
  • 2. Переименовываем Frontend в FrontendImpl Создаем пустой интерфейс Frontend FrontendImpl implements Frontend Компилируем, видим что ничего не изменилось Меняем везде (кроме new) FrontendImpl на Frontend Компилляция не проходит Добавляем в Frontend все нужные обявления методов
  • 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. public void run(){ while(true){ messageSystem.execForAbonent(this); //обработка сообщений removeDeadUsers(); //убираем «мертвых» пользователей TimeHelper.sleep(SLEEP_PERIOD); //ждем сообщений } }
  • 5.
  • 6.
  • 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. processMessages() doGMStep() replicate () processMessages() doGMStep() replicate () … …
  • 9.
  • 10. ― ― ― ― ―
  • 11. ― ― ― ―
  • 12.
  • 13. 18. Распределение классов по пакетам. Циклические зависимости между пакетами 19. Архитектура игрового сервера. Схема зависимостей модулей 20. Процесс работы игрового сервера, репликация
  • 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. 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. 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. 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. interface DamageVisitor{ void visit(Weapon weapon); void visit(Armor armor); void visit(Gear gear); } interface UnitPart{ void accept(DamageVisitor visitor); }
  • 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. 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){…) }