আমি আপনার অস্ত্রাগার এবং আপনার অস্ত্রাগারটি কীভাবে ডিজাইন করতে পারি তার একটি উদাহরণ দেওয়ার চেষ্টা করব।
আমাদের লক্ষ্য সত্তাকে ডিকুয়াল করা, সুতরাং অস্ত্রটি একটি ইন্টারফেস হওয়া উচিত।
interface Weapon {
public int getDamage();
}
মনে করুন যে প্রতিটি খেলোয়াড় কেবল একটি অস্ত্র রাখতে পারে, আমরা Strategy pattern
সহজেই অস্ত্রগুলি পরিবর্তন করতে ব্যবহার করতে পারি ।
class Knife implements Weapon {
private int damage = 10;
@Override
public int getDamage() {
return this.damage;
}
}
class Sword implements Weapon {
private int damage = 40;
@Override
public int getDamage() {
return this.damage;
}
}
খেলোয়াড় নিরস্ত্র হওয়ার ক্ষেত্রে আর একটি দরকারী প্যাটার্ন হ'ল নাল অবজেক্ট প্যাটার্ন ।
class Weaponless implements Weapon {
private int damage = 0;
@Override
public int getDamage() {
return this.damage;
}
}
অস্ত্রাগার হিসাবে, আমরা একাধিক প্রতিরক্ষা সরঞ্জাম পরতে পারেন।
// Defence classes,interfaces
interface Armor {
public int defend();
}
class Defenseless implements Armor {
@Override
public int defend() {
return 0;
}
}
abstract class Armory implements Armor {
private Armor armory;
protected int defence;
public Armory() {
this(new Defenseless());
}
public Armory(Armor force) {
this.armory = force;
}
@Override
public int defend() {
return this.armory.defend() + this.defence;
}
}
// Defence implementations
class Helmet extends Armory {
{
this.defence = 30;
}
}
class Gloves extends Armory {
{
this.defence = 10;
}
}
class Boots extends Armory {
{
this.defence = 10;
}
}
ডিকপলিংয়ের জন্য, আমি ডিফেন্ডারের জন্য একটি ইন্টারফেস তৈরি করেছি।
interface Defender {
int getDefended();
}
এবং Player
ক্লাস।
class Player implements Defender {
private String title;
private int health = 100;
private Weapon weapon = new Weaponless();
private List<Armor> armory = new ArrayList<Armor>(){{ new Defenseless(); }};
public Player(String name) {
this.title = name;
}
public Player() {
this("John Doe");
}
public String getName() {
return this.title;
}
public void setWeapon(Weapon weapon) {
this.weapon = weapon;
}
public void attack(Player enemy) {
System.out.println(this.getName() + " attacked " + enemy.getName());
int attack = enemy.getDefended() + enemy.getHealth()- this.weapon.getDamage();
int health = Math.min(enemy.getHealth(),attack);
System.out.println("After attack " + enemy.getName() + " health is " + health);
enemy.setHealth(health);
}
public int getHealth() {
return health;
}
private void setHealth(int health) {
/* Check for die */
this.health = health;
}
public void addArmory(Armor armor) {
this.armory.add(armor);
}
@Override
public int getDefended() {
int defence = this.armory.stream().mapToInt(armor -> armor.defend()).sum();
System.out.println(this.getName() + " defended , armory points are " + defence);
return defence;
}
}
আসুন কিছু গেমপ্লে যুক্ত করি।
public class Game {
public static void main(String[] args) {
Player yannis = new Player("yannis");
Player sven = new Player("sven");
yannis.setWeapon(new Knife());
sven.setWeapon(new Sword());
sven.addArmory(new Helmet());
sven.addArmory(new Boots());
yannis.attack(sven);
sven.attack(yannis);
}
}
ভাল খবর!