public abstract class Address { private String street; private String city; private String region; private String portalCode; public interface AddressfFactory { public Address createAddr
Trang 11 Abstract Factory…………1
2 Builder………5
3 Factory Method………7
4 Prototype………9
5 Singleton………11
6 Adapter………12
7 Bridge………13
8 Composite………16
9 Decorator………18
10 Façade………21
11 Flyweight………23
12 Proxy………24
13 Chain of Responsibility…25 14 Command………26
15 Interperter………28
16 Iterator………31
17 Mediator………32
18 Memento………33
19 Observer………35
20 State………37
21 Strategy………39
22 Template Method………40
23 Visitor………45
1 Abstract factory:
Trang 2public abstract class Address {
private String street;
private String city;
private String region;
private String portalCode;
public interface AddressfFactory {
public Address createAddress();
public PhoneNumber createPhoneNumber();
}
Trang 3public class FrenchAddress extends Address {
//Lay dia chi FRENCH
@Override
public String getCity() {
return "FRENCH";}
}
FrenchAddressFactory.java
public class FrenchAddressFactory implements AddressfFactory {
@Override
public Address createAddress() {
return new FrenchAddress();
}
@Override
public PhoneNumber createPhoneNumber() {
return new FrenchPhoneNumber();
public abstract class PhoneNumber {
private String name;
private int number;
Trang 4public class Test {
public static void main(String[] args) {
AddressfFactory factory = new USAAddressfactory();
Address usaAddress = factory.createAddress();
System.out.println(usaAddress.getCity());
PhoneNumber usaPhoneNumber = factory.createPhoneNumber();usaPhoneNumber.setNumber(6789);
System.out.println(usaPhoneNumber.getNumber());
}
USAAddressfactory.java
public class USAAddressfactory implements AddressfFactory{
@Override
public Address createAddress() {
return new USAAddress();
}
@Override
public PhoneNumber createPhoneNumber() {
return new USAPhoneNumber();
Trang 5public int getNumber() {
public class Address {
private String street;
private String city;
private String region;
Trang 6public void setCity(String city) {
public class AddressDirector {
public void Contruct(USAAddressBuilder builder, String street, String city,
String region) {builder.builderCity(city);
public abstract class Builder {
abstract public void builderStreet(String street);
abstract public void builderCity(String city);
abstract public void builderRegion(String region);
}
Test.java
public class Test {
public static void main(String[] args) {
AddressDirector director = new AddressDirector();
USAAddressBuilder builder = new USAAddressBuilder();
director.Contruct(builder, "ABC", "CDE", "FGH");
Address address = builder.getAddress();
System.out.println(address.getStreet());
System.out.println(address.getCity());
System.out.println(address.getRegion());
}
}
Trang 7public class USAAddressBuilder extends Builder {
private Address add = new Address();
public class Gioi extends XepLoai {
public Gioi(String name) {
Trang 8public Kha(String name) {
super(name);
}
}
TB.java
public class TB extends XepLoai {
public TB(String name) {
super(name);
}
}
Yeu.java
public class Yeu extends XepLoai {
public Yeu(String name) {
super(name);
}
}
Test.java
public class Test {
public static void main(String[] args) {
public class XepLoai {
private String xepLoai;
public XepLoai(String name) {
this.xepLoai = name;
}
// Phương thức thông báo điểm TB va Xep Loai Hoc Sinh
public void showMessenge(float diem) {
System.out.println("Diem TB cu ban la : " + diem +" -> Xep loai Hoc Sinh :"+ xepLoai );
}
}
Trang 9public class XepLoaiFactory {
public static XepLoai getInstance(float diem) {
if (diem < 5) {
return new Yeu("Yeu");
} else if (diem >= 5 && diem < 6.5) {
return new TB("TB");
} else if (diem >= 6.5 && diem < 8) {
return new Kha("Kha");
@Override
public void info() {
System.out.println("Thong tin cua Giao Vien :");}
@Override
Trang 10public void info() {
System.out.println("Thong tin cua Hoc Sinh :");
}
}
NhanVien.java
public abstract class NhanVien implements Cloneable {
private String id;
protected String type;
abstract void info();
public String getType() {
public Object clone() {
Object clone = null;
public class PhanLoaiNhanVien {
private static Hashtable<String, NhanVien> NhanVien = new Hashtable<String, NhanVien>();
public static NhanVien getNV(String nvId) {
NhanVien phanLoaiNV = NhanVien.get(nvId);
return (NhanVien) phanLoaiNV.clone();
}
Trang 11public static void phanLoai() {
GiaoVien giaoVien = new GiaoVien();
giaoVien.setId("1");
NhanVien.put(giaoVien.getId(), giaoVien);
HocSinh hocSinh = new HocSinh();
public class Test {
public static void main(String[] args) {
}
5 Singleton
FileLogger.java
public class FileLogger {
// Tao Logger toàn cục
private static FileLogger logger;
// Hàm khởi tạo de private de ko the bi goi
private FileLogger() { }
Trang 12// Static tra ve 1 logger duy nhat
public static FileLogger getFileLogger() {
if (logger == null) {
logger = new FileLogger();
}
return logger;}
public class Adaptee {
public void specificRequest() {
JOptionPane.showMessageDialog( null, "Hello Design Pattern",
"from Adaptee", JOptionPane.OK_OPTION );
}
}
Adapter.java
package Adapter;
public class Adapter extends Target {
private Adaptee obj = new Adaptee();
public void operation() {
Trang 13AdapterClient.java
package Adapter;
public class AdapterClient {
static public Target Create( String str ) {
if ( str.equals( "Target" ) ) return new Target();
if ( str.equals( "Adapter" ) ) return new Adapter();
return null;
}
static public void main( String[] args ) {
Target target1 = Create( "Target" );
Target target2 = Create( "Adapter" );
public class Target {
public void operation() {
System.out.println( "Hello Design Pattern" );
}}
7 Bridge
Trang 14public class ConcreteImplementA implements MyImplementation {
@Override
public void doMthod1() {
System.out.println(" Mthod1 - A");
}
@Override
public void doMthod2() {
System.out.println(" Mthod2 - A");
public void doMthod1() {
System.out.println(" Mthod1 - B ");
}
@Override
public void doMthod2() {
System.out.println(" Mthod2 - B ");
}
}
MyAbstraction.java
public class MyAbstraction {
private MyImplementation myImp;
public MyAbstraction(MyImplementation myImp) {
this.myImp = myImp;
Trang 15public interface MyImplementation {
public void doMthod1();
public void doMthod2();
}
RefineAbtraction1.java
public class RefineAbtraction1 extends MyAbstraction{
public RefineAbtraction1(MyImplementation myImp) {
public void method2() {
System.out.println("Mthod2 - RefineAbtraction1");}
}
RefineAbtraction2.java
public class RefineAbtraction2 extends MyAbstraction{
public RefineAbtraction2(MyImplementation myImp) {
super(myImp);
}
@Override
public void method1() {
System.out.println("Mthod1 - RefineAbtraction2");}
Trang 16public class Test {
public static void main(String[] args) {
MyImplementation imp = new ConcreteImplementA();
MyAbstraction myAbs = new RefineAbtraction1(imp);
public class Project implements TaskItem {
private String name;
private ArrayList<TaskItem> subtask = new ArrayList<TaskItem>();
Trang 17public void removeTaskItem(TaskItem item) {
subtask.remove(item);
}
}
Task.java
public class Task implements TaskItem {
private String name;
private double time;
public Task() {
}
Trang 18public Task(String name, double time) {
public interface TaskItem {
public double getTime();
}
9 Decorator
Trang 19public class Book implements LibraryItem {
private String title ;
private int page ;
public Book(String title, int page) {
public void display() {
System.out.println("Title : " + title);
System.out.println("Page number : + page ");
}
}
BookDecorator.java
public class BookDecorator extends LibDecorator {
private String borrower;
public BookDecorator(LibraryItem libraryItem, String borrower) {
public abstract class LibDecorator implements LibraryItem {
private LibraryItem libraryItem;
public LibDecorator(LibraryItem libraryItem) {
Trang 20public interface LibraryItem {
public void display();
}
Video.java
public class Video implements LibraryItem{
private String title ;
private int minutes ;
public Video(String title, int minutes) {
public void display() {
System.out.println("Title : " + title);System.out.println("Time : + minutes ");}
}
VideoDecorator.java
public class VideoDecorator extends LibDecorator {
public VideoDecorator(LibraryItem libraryItem) {
Trang 21public class Address {
private String address;
public String getAddress() {
public void display() {
System.out.println("Address: " + getAddress());}
}
Name.java
public class Name {
private String name;
public String getName() {
public void display() {
System.out.println("Name: " + getName());
}
}
Person.java
Trang 22public class Person {
private Address address;
private PhoneNumber phone;
private Name name;
public Person(Address address, PhoneNumber phone, Name name) {
public class PhoneNumber {
private int phoneNumber;
public int getPhoneNumber() {
public void display() {
System.out.println("PhoneNumber: " + getPhoneNumber());}
}
11 Flyweight
Trang 23public class CharacterFactory {
private Hashtable<String, Character> pool = new Hashtable<String, Character>();
public int getNum() {
return pool.size();
}
public Character get(String symbol, String fontFace) {
Character cString key = symbol + fontFace;
if ((c = (Characterr) pool.get(key)) != null) {
return ;} else {
c = new ConcreteCharacter(symbol, fontFace);
pool.put(key, c);
return ;}
}
}
Character.java
public interface Character {
public void draw();
}
ConcreteCharacter.java
public class ConcreteCharacter implements Character {
private String symbol;
private String font;
Trang 24public void draw() {
System.out.println("Symbol " + this.symbol + " with font " + this.font);}
public void process() {
// TODO Auto-generated method stubSystem.out.println("GIF Image");
}
}
Image.java
public interface Image {
public void process();
}
ImageProxy.java
public class ImageProxy implements Image {
private Image image;
@Override
public void process() {
// TODO Auto-generated method stub
public void process() {
// TODO Auto-generated method stubSystem.out.println("JPG Image");
}
Trang 25protected Approver Successor;
public abstract void HandleRequest(int money);
public void Next(Approver nextApprover)
public class BrotherApproval extends Approver{
public void HandleRequest(int money)
public class FatherApproval extends Approver{
public void HandleRequest(int money)
Trang 26MotherApproval.java
public class MotherApproval extends Approver{
public void HandleRequest(int money)
public class Test{
public static void main(String[] args)
{
int[] money = {3, 30, 60, 100, 200, 500};
Approver brotherApproval = new BrotherApproval();
Approver motherApproval = new MotherApproval();
Approver fatherApproval = new FatherApproval();
brotherApproval.Next(motherApproval);
motherApproval.Next(fatherApproval);
for (int : money){
System.out.println("Request "+ +"k");
Trang 27public interface Command {
public void execute();
}
ConcreateCommand.java
public class ConcreateCommand implements Command {
private Receiver receiver;
public Receiver getReceiver() {
public void execute() {
// TODO Auto-generated method stubreceiver.doAction();
}
}
Invoker.java
public class Invoker {
public void exacuteCommand(Command command) {
command.execute();
}
Trang 28Receiver.java
public class Receiver {
private String name;
public Receiver(String name) {
super();
this.name = name;
}
public void doAction() {
System.out.println(this.name + "fullfill request!");
}
}
Test.java
public class Test {
public static void main(String[] args) {
ConcreateCommand command = new ConcreateCommand();
command.setReceiver(new Receiver("Tung"));
Invoker invoker = new Invoker();
public class Context{
public String input;
public int output;
Trang 29là cách định nghĩa các chữ tương ứng với giá trị của nó.*/
abstract class Expression
abstract public String One();
abstract public String Four();
abstract public String Five();
abstract public String Nine();
abstract public int Multiplier();
}
HundredExpresssion.java
public class HundredExpresssion extends Expression{
public String One(){return "C";}
public String Four(){return "CD";}
public String Five(){return "D";}
public String Nine() {return "CM";}
public int Multiplier(){return 100;}
}
OneExpresssion.java
public class OneExpresssion extends Expression{
public String One(){return "I";}
public String Four(){return "IV";}
public String Five(){return "V";}
public String Nine() {return "IX";}
Trang 30public int Multiplier(){return 1;}
}
TenExpresssion.java
public class TenExpresssion extends Expression{
public String One(){return "X";}
public String Four(){return "XL";}
public String Five(){return "L";}
public String Nine() {return "XC";}
public int Multiplier(){return 10;}
}
ThousandExpresssion.java
public class ThousandExpresssion extends Expression{
public String One(){return "M";}
public String Four(){return " ";}
public String Five(){return " ";}
public String Nine() {return " ";}
public int Multiplier(){return 1000;}
}
Test.java
/*
Doc so La Mã là từ trái sang phải cộng dồn
Nếu số nằm ngay bên phải một số có giá trị lớn hơn chính nó thì phải trừ đi nó
public class Test {
public static void main(String[] args){
String str;
String select = "C";
ArrayList<Expression> parse = new ArrayList();
Scanner scanIn=new Scanner(System.in);
while (select != "K" && select != "k"){
System.out.println("Nhap vao so La Ma : ");
Trang 31for (Expression exp : parse)
public interface Container {
public Iterator getIterator();
}
Iterator.java
public interface Iterator {
public boolean hasNext();
public Object next();
}
IteratorPatternDemo.java
public class IteratorPatternDemo {
public static void main(String[] args) {
NameRepository namesRepository = new NameRepository();
for(Iterator iter = namesRepository.getIterator(); iter.hasNext(); ){ String name = (String)iter.next();
System.out.println("Name : " + name);
}
}
}
Trang 32public class NameRepository implements Container {
public String names[] = {"Robert" , "John" ,"Julie" , "Lora"};
@Override
public Iterator getIterator() {
return new NameIterator();
public class ChatRoom {
public static void showMessage(User user, String message){
System.out.println(new Date().toString()
+ " [" + user.getName() +"] : " + message);}
}
Trang 33public class MediatorPatternDemo {
public static void main(String[] args) {
User robert = new User("Robert");
User john = new User("John");
robert.sendMessage("Hi! John!");
john.sendMessage("Hello! Robert!");}
}
User.java
public class User {
private String name;
public String getName() {