Tampilkan postingan dengan label Design Pattern. Tampilkan semua postingan
Tampilkan postingan dengan label Design Pattern. Tampilkan semua postingan

Pattern Mediator di Java, C# dan PHP

Pattern Mediator di Java, C# dan PHP
Setelah update tentang pattern observer, langsung ane terusin update juga design pattern yang ane bahas terakhir yaitu tentang pattern mediator dan implementasinya di Java, C# dan PHP (mengejar target gan) :D ... pattern mediator ini sama seperti observer yang berkategori design pattern behaviour.  Fungsi dari pattern ini adalah memungkinkan interaksi antara object sehingga ketika object berinteraksi dengan object lainnya sama2 dapat memberi informasi baru ke dalam object tersebut ... contoh kasus nya seperti aplikasi chating, jika ada 2 client lagi chatingan maka ke dua nya sangat mungkin untuk bertukar informasi saat chating ??
ya kan ?? :D kalo gak bisa bertukar informasi ya berarti bukan chating...  wkwkwkwkwkwk... dan 2 client tadi kita ibaratkan seperti object yang saling berinteraksi... biar lebih paham akan ane coba implementasinya di Java, C# dan PHP...

Java
package Mediator;

public class MainClass {
public static void main(String[] args) {
MediatorConcrete mediator = new MediatorConcrete();

Friend1 friend1 = new Friend1(mediator);
Friend2 friend2 = new Friend2(mediator);

mediator.SetFriend1(friend1);
mediator.SetFriend2(friend2);

friend1.Send("I love U");
friend2.Send("I Love U too");
}
}

abstract class Mediator{
public abstract void Send(Friend friend,String message);
}

class MediatorConcrete extends Mediator{
private Friend1 friend1;
private Friend2 friend2;

public void SetFriend1(Friend1 friend1){
this.friend1 = friend1;
}

public void SetFriend2(Friend2 friend2){
this.friend2 = friend2;
}

@Override
public void Send(Friend friend, String message) {
if(friend == friend1){
friend2.Notify(message);
}else{
friend1.Notify(message);
}
}
}

abstract class Friend{
public Friend(Mediator mediator) {
this.mediator = mediator;
}
protected Mediator mediator;
}

class Friend1 extends Friend{
public Friend1(Mediator mediator) {
super(mediator);
}

public void Send(String message){
mediator.Send(this, message);
}

public void Notify(String message){
System.out.println("Friend 1 menerima pesan "+message);
}
}

class Friend2 extends Friend{
public Friend2(Mediator mediator) {
super(mediator);
}

public void Send(String messages){
mediator.Send(this, messages);
}

public void Notify(String message){
System.out.println("Friend 2 menerima pesan "+message);
}
}


C#
using System;

namespace Mediator
{
class Program
{
public static void Main(string[] args)
{
MediatorConcrete mediator = new MediatorConcrete();

Friend1 friend1 = new Friend1(mediator);
Friend2 friend2 = new Friend2(mediator);

mediator.Friend1 = friend1;
mediator.Friend2 = friend2;

friend1.Send("I love U");
friend2.Send("I Love U too");

Console.ReadKey(true);
}
}

abstract class Mediator{
public abstract void Send(Friend friend,string message);
}

class MediatorConcrete : Mediator{
private Friend1 friend1;
private Friend2 friend2;

public Friend1 Friend1 {
get { return friend1; }
set { friend1 = value; }
}

public Friend2 Friend2 {
get { return friend2; }
set { friend2 = value; }
}

public override void Send(Friend friend, string message) {
if(friend == friend1){
friend2.Notify(message);
}else{
friend1.Notify(message);
}
}
}

abstract class Friend{
public Friend(Mediator mediator) {
this.mediator = mediator;
}
protected Mediator mediator;
}

class Friend1 : Friend{
public Friend1(Mediator mediator):base(mediator) {
}

public void Send(string message){
mediator.Send(this, message);
}

public void Notify(string message){
Console.WriteLine("Friend 1 menerima pesan "+message);
}
}

class Friend2 : Friend{
public Friend2(Mediator mediator):base(mediator){
}

public void Send(string messages){
mediator.Send(this, messages);
}

public void Notify(string message){
Console.WriteLine("Friend 2 menerima pesan "+message);
}
}
}


PHP
<?php
abstract class Mediator{
public abstract function Send($friend,$message);
}

class MediatorConcrete extends Mediator{
private $friend1;
private $friend2;

function SetFriend1($friend1){
$this->friend1 = $friend1;
}

function SetFriend2($friend2){
$this->friend2 = $friend2;
}

function Send($friend,$message) {
if($friend == $this->friend1){
$this->friend2->Notify($message);
}else{
$this->friend1->Notify($message);
}
}
}

abstract class Friend{
function __construct($mediator) {
$this->mediator = $mediator;
}
protected $mediator;
}

class Friend1 extends Friend{
function __construct($mediator) {
parent::__construct($mediator);
}

function Send($message){
$this->mediator->Send($this, $message);
}

function Notify($message){
echo("Friend 1 menerima pesan ".$message."< br />");
}
}

class Friend2 extends Friend{
function __construct($mediator) {
parent::__construct($mediator);
}

function Send($messages){
$this->mediator->Send($this,$messages);
}

function Notify($message){
echo("Friend 2 menerima pesan ".$message."< br />");
}
}

$mediator = new MediatorConcrete();

$friend1 = new Friend1($mediator);
$friend2 = new Friend2($mediator);

$mediator->SetFriend1($friend1);
$mediator->SetFriend2($friend2);

$friend1->Send("I love U");
$friend2->Send("I Love U too");
?>

Biar lebih paham lagi, coba ente analisa lagi program diatas, dan tentunya seperti itulah interaksi antar object yang memungkinkan untuk saling memberikan informasi dengan menggunakan mediator tentunya :D hehee.. sekian dulu ya ? dengan berakhirnya postingan ini, berakhir juga pembahasan ane tentang design pattern dan penerapannya di Java, C# dan PHP... semoga bermanfaat bagi ane, ente dan pengunjung blog ini :) ... happy cooding
Read More

Pattern Observer di Java, C# dan PHP

Pattern Observer di Java, C# dan PHP
Setelah jumatan ada kuliah... waktu nya tidur siang si sebenarna.. tapi karena memang sudah kewajiban untuk mengikuti mata kuliah ke PGRI-an..  ya diikuti ajalah, skalian ane juga mau update lagi tentag design pattern yang rencana nya ane akhiri semua pembahasan design pattern hari ini.. semoga aja bisa... hehehee.. oke kali ini tentang pattern observer yang akan ane bahas dan penerapannya di Java,C# dan PHP .. pattern ini termasuk dalam kategori behaviour  yang menangani kelakuan sebuah program... dan juga termasuk sering dipakai, dan juga sering kita temui...
Contoh real nya yaitu seperti notifikasi di facebook... konsep kerja pattern ini adalah melaporkan secara otomatis ke server jika ada sebuah data/proses baru dan si server melaporkan ke semua client yang telah didaftarkan sebelumnya... sekarang ane akan mencoba untuk mengimplementasikannya di Java, C# dan PHP

Java
package ObServer;

import java.util.*;

public class MainClass {
public static void main(String[] args) {
SubjectConcrete subject = new SubjectConcrete();

subject.Add(new User(subject, "Rizal"));
subject.Add(new User(subject, "Afani"));

subject.SetSubjectStatus("Selamat Pagi");
subject.Notivy();
}
}

interface Subject{
public void Add(ObServer observer);
public void Remove(ObServer observer);
public void Notivy();
}

interface ObServer{
public void DoUpdate();
}

class SubjectConcrete implements Subject{
private List<ObServer> list_observer = new ArrayList<ObServer>();
private String SubjectStatus;
public void SetSubjectStatus(String status){
this.SubjectStatus = status;
}
public String GetSubjectStatus(){
return this.SubjectStatus;
}
@Override
public void Add(ObServer observer) {
list_observer.add(observer);
}

@Override
public void Remove(ObServer observer) {
list_observer.remove(observer);
}

@Override
public void Notivy() {
for(ObServer list : list_observer){
list.DoUpdate();
}
}
}

class User implements ObServer{
private String name;
private SubjectConcrete subject;
public User(SubjectConcrete subject,String name) {
this.subject = subject;
this.name = name;
}

public void SetName(String name){
this.name = name;
}

public String GetName(){
return this.name;
}

public void SetSubject(SubjectConcrete subject){
this.subject = subject;
}

public SubjectConcrete GetSubject(){
return this.subject;
}

@Override
public void DoUpdate() {
System.out.println(this.name+" membaca status Baru '"+this.subject.GetSubjectStatus()+"'");
}
}


C#
using System;
using System.Collections.Generic;

namespace Observer
{
class Program
{
public static void Main(string[] args)
{
SubjectConcrete subject = new SubjectConcrete();

subject.Add(new User(subject, "Rizal"));
subject.Add(new User(subject, "Afani"));

subject.SetSubjectStatus("Selamat Pagi");
subject.Notivy();

Console.ReadKey(true);
}
}

interface Subject{
void Add(ObServer observer);
void Remove(ObServer observer);
void Notivy();
}

interface ObServer{
void DoUpdate();
}

class SubjectConcrete : Subject{
private List<ObServer> list_observer = new List<ObServer>();
private string SubjectStatus;
public void SetSubjectStatus(string status){
this.SubjectStatus = status;
}
public string GetSubjectStatus(){
return this.SubjectStatus;
}

public void Add(ObServer observer) {
list_observer.Add(observer);
}


public void Remove(ObServer observer) {
list_observer.Remove(observer);
}


public void Notivy() {
foreach(ObServer list in list_observer){
list.DoUpdate();
}
}
}

class User : ObServer{
private string name;
private SubjectConcrete subject;
public User(SubjectConcrete subject,string name) {
this.subject = subject;
this.name = name;
}

public void SetName(string name){
this.name = name;
}

public string GetName(){
return this.name;
}

public void SetSubject(SubjectConcrete subject){
this.subject = subject;
}

public SubjectConcrete GetSubject(){
return this.subject;
}


public void DoUpdate() {
Console.WriteLine(this.name+" membaca status Baru '"+this.subject.GetSubjectStatus()+"'");
}
}
}


PHP
<?php
interface Subject{
function Add($index,$observer);
function Remove($index);
function Notivy();
}

interface ObServer{
function DoUpdate();
}

class SubjectConcrete implements Subject{
private $list_observer = Array();
private $SubjectStatus;
function SetSubjectStatus($status){
$this->SubjectStatus = $status;
}
function GetSubjectStatus(){
return $this->SubjectStatus;
}

function Add($index,$observer) {
$this->list_observer[$index] = $observer;
}

function Remove($index) {
unset($this->list_observer[$index]);
}

function Notivy() {
foreach($this->list_observer as $list){
$list->DoUpdate();
}
}
}

class User implements ObServer{
private $name;
private $subject;
function __construct($subject,$name) {
$this->subject = $subject;
$this->name = $name;
}

function SetName($name){
$this->name = $name;
}

function GetName(){
return $this->name;
}

function SetSubject($subject){
$this->subject = $subject;
}

function GetSubject(){
return $this->subject;
}

function DoUpdate() {
echo($this->name." membaca status Baru '".$this->subject->GetSubjectStatus()."'< br />");
}
}

$subject = new SubjectConcrete();

$subject->Add('Rizal',new User($subject, "Rizal"));
$subject->Add('Afani',new User($subject, "Afani"));

$subject->SetSubjectStatus("Selamat Pagi");
$subject->Notivy();
?>

Read More