Chủ Nhật, 19 tháng 2, 2017

design Pattern Observer

-Thuộc nhóm hành vi đối tượng
-Phản ứng lại sự thay đổi của 1 đối tượng trong cùng 1 nhóm


1.Tạo InterFace
public interface IStudentObserver {
  public void Obclass( ObserverClass observerClass);
public  void setchucvu(String chucvu);
  public  String getchucvu();
  public  void setName(String name);
  public  String getName();
         
}

2.Tạo 1 lớp phản ứng lại các thành viên (giống radioButtonGroup)
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Obverser;

import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Xuanlinh
 */
public class ObserverClass {

    private List<IStudentObserver> listhocsinh = new ArrayList<>();
    

   
    public void addStudent(IStudentObserver student) {
        listhocsinh.add(student);
    }

    public void DeleteStudent(IStudentObserver student) {
        listhocsinh.remove(student);
    }

    public void Update() {
        for (int i = 0; i < listhocsinh.size(); i++) {
            if (listhocsinh.get(i).getchucvu().equals("LT")) {
                for (IStudentObserver s : listhocsinh) {
                    if (!s.getName().equals(listhocsinh.get(i).getName())) {
                        s.setchucvu("Thanh vien");
                    }
                } 
                break;
            }
           
        }
    }
    public void getInfo(){
        Update();
    for(IStudentObserver s : listhocsinh)
            System.out.println("\nTen hoc sinh : "+s.getName()+"chuc vu : "+s.getchucvu());
    }
}
1.Tạo 1 lớp thành viên (giống radioButton)
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Obverser;

/**
 *
 * @author Xuanlinh
 */
public class Student implements IStudentObserver{
     
    public  Student(String name)
    {
    this.name=name;
    }
    @Override
    public void Obclass( ObserverClass observerClass) {
      observerClass.addStudent(this);
    }
      String chucvu,name;
    @Override
    public void setchucvu(String chucvu) {
       this.chucvu=chucvu;
    }

    @Override
    public String getchucvu() {
      return chucvu;
    }

    @Override
    public void setName(String name) {
       this.name=name;
    }

    @Override
    public String getName() {
       return name;
    }
    
}
------------Main------------
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Obverser;

/**
 *
 * @author Xuanlinh
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        ObserverClass observerClass=new ObserverClass();
     Student s1=new Student("S1");
     Student s2=new Student("S2");
     Student s3=new Student("S3");
     Student s4=new Student("S4");
     s1.setchucvu("HV");
     s2.setchucvu("cf");
     s3.setchucvu("aa");
     s4.setchucvu("LT");
    
     s1.Obclass(observerClass);
      s2.Obclass(observerClass);
       s3.Obclass(observerClass);
        s4.Obclass(observerClass);
        observerClass.getInfo();
    }
    
}


Design Pattern Factory

---Design Pattern Factory :-Thuộc nhóm Nhóm khởi tạo
                             -Tạo lớp khởi tạo thuộc cùng 1 nhóm
                             - Khởi tạo đối tượng linh hoạt

                     
1.tạo lớp Interface
package InterFace;

/**
 *
 * @author Xuanlinh
 */
public interface IPersonal {
    public void In();
    public void Nhap();
    public void Tinh();
   
}

2.Tạo lớp thực thi
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package InterFace;

import java.util.Scanner;

public class Personal implements IPersonal{

   protected String ten;

    public String getTen() {
        return ten;
    }

    public void setTen(String ten) {
        this.ten = ten;
    }

    public String getTuoi() {
        return tuoi;
    }

    public void setTuoi(String tuoi) {
        this.tuoi = tuoi;
    }

    public String getDiachi() {
        return diachi;
    }

    public void setDiachi(String diachi) {
        this.diachi = diachi;
    }
   protected  String tuoi;
   protected  String diachi;
 
    @Override
    public void In() {
         System.out.print("\n---------------------------------------");
      System.out.print("\nNhap vao ten"+ten);
             
                System.out.print("\nNhap vao tuoi"+tuoi);
               
                  System.out.print("\nNhap vao diachi"+diachi);
                 
               
                 
                 
    }

    @Override
    public void Nhap() {
       Scanner input = new Scanner(System.in);
     
              System.out.print("\nNhap vao ten");
              ten=input.nextLine();
                System.out.print("\nNhap vao tuoi");
                tuoi=input.nextLine();
                  System.out.print("\nNhap vao diachi");
                    diachi=input.nextLine();
                 
                 
    }

    @Override
    public void Tinh() {
     
    }
   
   
}
----------------------------------------
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package InterFace;

import java.util.Scanner;

/**
 *
 * @author Xuanlinh
 */
public class Manager extends Personal implements IPersonal{
   
    String capbac;
        @Override
    public void In() {
         System.out.print("\n---------------------------------------");
      super.In();
               
                  System.out.print("\nNhap vao cap bac"+capbac);
                 
               
                 
                 
    }

    public String getCapbac() {
        return capbac;
    }

    public void setCapbac(String capbac) {
        this.capbac = capbac;
    }

    @Override
    public void Nhap() {
       Scanner input = new Scanner(System.in);
      super.Nhap();
            System.out.print("\nNhap vao capbac");
                    capbac=input.nextLine();
             
                 
                 
    }
    @Override
    public void Tinh() {
        System.out.print("\nLuong  là 50 triệu");
    }
}
-------------------------------------------------------
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package InterFace;

import java.util.Scanner;

/**
 *
 * @author Xuanlinh
 */
public class teacher extends Personal implements IPersonal{

      String chucvu;

    public String getChucvu() {
        return chucvu;
    }

    public void setChucvu(String chucvu) {
        this.chucvu = chucvu;
    }
        @Override
    public void In() {
         System.out.print("\n---------------------------------------");
      super.In();
               
                  System.out.print("\n chucvu"+chucvu);
                 
               
                 
                 
    }

    @Override
    public void Nhap() {
       Scanner input = new Scanner(System.in);
      super.Nhap();
             System.out.print("\nNhap vao chucvu");
                    chucvu=input.nextLine();
                 
                 
    }
    @Override
    public void Tinh() {
        System.out.print("\nLuong  là 10 triệu");
    }
   
}
-------------------------------
3.Tạo 1 lớp Factory quản lý các lớp thư thi của Interface personal
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package InterFace;

/**
 *
 * @author Xuanlinh
 */
public class FactoryIPersonal {
   private IPersonal p;
  public FactoryIPersonal (){}
          ;
  public IPersonal Employee(String name)
  {
  switch(name)
  {
      case "teacher" :{
      p=new teacher();
      return p;
      }
      case "manager" :{
      p=new Manager();
      return p;
      }
  }
 
  return null;
  }
}
4.gọi lớp khởi tạo factory
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package InterFace;

public class Main {

 
    public static void main(String[] args) {
      IPersonal pa=new FactoryIPersonal().Employee("teacher");
      pa.Nhap();
      pa.In();
      pa.Tinh();
      pa=new FactoryIPersonal().Employee("manager");
      pa.Nhap();
      pa.In();
      pa.Tinh();
      Employee E=new Employee(new teacher());
      E.nhap();
      E.in();
      E.tinh();
    }
   
}