PDA

View Full Version : پترن های جاول (java patern)



askari.khosravani
شنبه 22 آبان 1389, 18:12 عصر
با سلام خدمت دوستان عزیز
یک راهنمایی فوری از استاتید محترم می خواستم
لازم به ذکر است اینجانب بسیار مبتدی در امور جاوا می باشم
و پترن های گروه GOF در قالب problem and solution را می خواستم اگه امکان داره به تعداد 20 تا اگر به زبان اصلی هم باشد موردی ندارد.

askari.khosravani
یک شنبه 23 آبان 1389, 09:27 صبح
کسی در مورد پترن های جاوا اطلاعاتی نداره؟

javaphantom
یک شنبه 23 آبان 1389, 10:16 صبح
یعنی زحمت سرچ هم به خودت نمی دی فقط حاظر باشه اونم به حالت طلب کارانه

Software Architecture Design Pattern in Java

askari.khosravani
یک شنبه 23 آبان 1389, 16:38 عصر
گفتم که مبتدیم شما که استادین باید راهنمایی کنید و بگید اصلا باید چی سرچ کنم.
بازم ممنون

askari.khosravani
یک شنبه 23 آبان 1389, 16:44 عصر
حالا دوست عزیز شما که اینقدر زحمت کشیدید می خواستم بدونم این به صورت problem & solution هست؟؟

javaphantom
یک شنبه 23 آبان 1389, 18:57 عصر
حالا دوست عزیز شما که اینقدر زحمت کشیدید می خواستم بدونم این به صورت problem & solution هست؟؟

زحمت خوندم نمیدی بخودت.

بله شامل problem and solution هست. شما که زحمت دادید به خودتون مفهوم pattern رو مطالعه کردین این کتاب رو هم زحمتشو بکشین

askari.khosravani
یک شنبه 23 آبان 1389, 21:45 عصر
آقای بداخلاق حالا که زحمت کشیدی اول ممنون دوم اینکه ترجمه اش رو هم داری؟

javaphantom
دوشنبه 24 آبان 1389, 19:21 عصر
آقای بداخلاق حالا که زحمت کشیدی اول ممنون دوم اینکه ترجمه اش رو هم داری؟

نه ول تو بخون هر کدوم نفهمیدی تو همین فروم یک موضوع به عنوان pattern باز می کنیم یکی یکی پیاده سازی می کنیم

askari.khosravani
دوشنبه 06 دی 1389, 05:23 صبح
من چند تا پترن گرفتم و مطالعشون کردم حالا می خوام اینها رو تو محیط نت بینز اجراش کنم کجا باید کپی کنم اصلا باید چه کارشون کنم؟
public class ImageReaderFactory { public static ImageReader getImageReader(InputStream is) { int imageType = determineImageType(is); switch(imageType) { case ImageReaderFactory.GIF: return new GifReader(is); case ImageReaderFactory.JPEG: return new JpegReader(is); // etc. } }}

javaphantom
دوشنبه 06 دی 1389, 10:59 صبح
من چند تا پترن گرفتم و مطالعشون کردم حالا می خوام اینها رو تو محیط نت بینز اجراش کنم کجا باید کپی کنم اصلا باید چه کارشون کنم؟
public class ImageReaderFactory { public static ImageReader getImageReader(InputStream is) { int imageType = determineImageType(is); switch(imageType) { case ImageReaderFactory.GIF: return new GifReader(is); case ImageReaderFactory.JPEG: return new JpegReader(is); // etc. } }}


من فکر کنم که منظور و هدف شما pattern factory هست.

نکته این pattern مخصوص جاوا نیست و با هر زبان object oriented قابل پیاده سازی هست.

وقتی صحبت از pattern می شه باید دو نکته رو در نظر گرفت یک مشکل دوم راه حل مشکل یا به عبارت دیگر text and context

برای توضیح دادن مشکل سعی می کنم یک مثال بزنم و توضیح بدم این pattern چه جوری به ما کمک می کنه.

فرض کنید ما مجموعه پستانداران رو رو زمین داریم و می دونیم که پستانداران روی کره زمین نحوه حرف زدن راه رفتن و خیلی چیزهای دیگرشون باهم متفاوت هست اما به هرحال جزو گروه پستانداران هستند. حالا با فرض اینکه ما interface ی از رفتارهای پستانداران داشته باشیم که برای نمونه من فقط راه رفتن و حرف زدن رو مثال زدم می خواهیم به طرح مشکل بپردازیم. پس من یک interface دارم که مخصوص دو رفتار از پستاندارن هست.


public interface Mammal {
public void doWalk();
public void doTalk();
}

قدم بعد اینکه فرض می کنیم دو نمونه از پستانداران مثل سگ و انسان که هر کدوم نوع حرف زدن و راه رفتن خودشون رو دارن اومدن و این رفتارها رو برای خودشون پیاده سازی کردن.
پس دو کلاس نیاز داریم که Interface رو implement کرده باشن یکی Dog و دومی Human به این شکل


public class Human implements Mammal {
public void doWalk() {
System.out.println("walk like human");
}

public void doTalk() {
System.out.println("talk like human");
}
}


public class Dog implements Mammal{
public void doWalk() {
System.out.println("walk like dog");
}

public void doTalk() {
System.out.println("talk like dog");
}
}

مشکل : من چه جوری می تونم کاری کنم مثلا با اشاره به اینکه من می خوام طرز راه رفتن سگ رو بدونم گفتن یک سگ مشکلم حل بشه.

راه حل ساده : باید از کلاس سگ instance بگیری و متدود doWalk رو صدا کنی.

سوال : الان ما دو تا کلاس داریم ولی ما می دونیم که بیش از 10000 نوع پستاندار داریم خوب این چه کاری بود از همون اول می یومدیم 10000 کلاس متفاوت با رفتار متفاوت می نوشتیم بعد هر کدوم که می خواستیم از شون instance می گرفتیم و کار تمام بود.

بزارین سوالم رو طوری دیگه مطرح کنم. ما همه می دونم که کل تمام کلاس پستاندارن از یک interface که مخصوص اونها هست پیاده سازی شده. من اگر یک کلاسی داشتم که مثل یک کارخونه عمل می کرد و من فقط بهش می گفتم که کدون نوع از کلاس رو بهت می دم و تو جاش برم instance بگیر خوب می شد.

دقیقا من یک کارخونه نیاز دارم که بهش ورودی بدم و اون بر اساس ورودی من خروجی درست رو بر گردونه.
کلاس زیر فکر کنم کار من رو راه می دازه


public class MammalFactory {

public<Mammal> Mammal getMammal(Class<Mammal> m) throws Exception {
return m.newInstance();
}
}

دقیقا همون چیزی که می خواستم همینه بهش می گم کدوم کلاس یا کدوم نوع رو می خوام اونم می ره برام می یارتش. پس در کل می شه اینطوری برنامه من برای اجرا که client می یاد این factory یا کار خونه رو صدا می کنه یا بهتر بگم سفارش می ده و اون کارخونست که داره برای من مدیریت می کنه.

این کد client


public class Client {

public static void main(String[] s) throws Exception {
MammalFactory m = new MammalFactory();
Human mammal = m.getMammal(Human.class);
mammal.doTalk();
}
}

من فقط نوع انسان رو دادم و اونم برام رفت و انسان رو آورد.