場景
這個場景好像不用太多說淋淀,主要是減少new的數(shù)量,確保實例唯一覆醇。
代碼
//version1
public class SingleFactory {
private static SingleFactory singleFactory = new SingleFactory();
private SingleFactory(){
System.out.println("init method");
}
public static SingleFactory getInstance(){
return singleFactory;
}
}
public class HungrySingleFactory {
private static HungrySingleFactory hungrySingleFactory;
private HungrySingleFactory(){
System.out.println("init");
}
public static HungrySingleFactory getInstance(){
if(hungrySingleFactory == null) {
synchronized (HungrySingleFactory.class) {
if(hungrySingleFactory == null) {
hungrySingleFactory = new HungrySingleFactory();
}
}
}
return hungrySingleFactory;
}
}
定義
保證一個類只有一個實例朵纷,并提供一個訪問它的全局訪問點
類圖
場景
現(xiàn)在公交車都是上車刷卡。但是在90年代初都是在每輛公交車上有收費員跟隨公交車永脓,每站上車來的人需要和收費員買票
代碼
public class Ticket {
private String startStation;
private String endStation;
private int stationNum;
private double money;
}
public class Passenger {
private Ticket ticket;
public Ticket getTicket() {
return ticket;
}
public void setTicket(Ticket ticket) {
this.ticket = ticket;
}
}
public class Bus {
private List<Passenger> passengerList = new ArrayList<Passenger>();
public void addPassenger(Passenger passenger) {
passengerList.add(passenger);
}
public void removePassenger(Passenger passenger) {
passengerList.remove(passenger);
}
public int getPassengerNum() {
return passengerList.size();
}
public Passenger getPassenger(int index) {
return passengerList.get(index);
}
}
public interface Iterator {
public boolean hasNext();
public Object next();
}
public class Cashier implements Iterator {
private Bus bus;
public Cashier(Bus bus) {
this.bus = bus;
}
int num = 1;
public void reset(){
num = 1;
}
public boolean hasNext() {
return num < bus.getPassengerNum();
}
public Passenger next() {
Passenger passenger = bus.getPassenger(num);
num++;
return passenger;
}
public void iterator() {
reset();
while(hasNext()){
Passenger passenger = next();
Ticket pTicket = passenger.getTicket();
if(pTicket == null) {
System.out.println("請你立刻買票");
}
}
}
public Ticket pushTicket(String startStation, String endStation, int stationNum, int money) {
Ticket ticket = new Ticket();
ticket.setStartStation(startStation);
ticket.setEndStation(endStation);
ticket.setStationNum(stationNum);
ticket.setMoney(money);
return ticket;
}
}
public class Tester {
public static void main(String[] args) {
Bus bus = new Bus();
Cashier cashier = new Cashier(bus);
Passenger p1 = new Passenger();
bus.addPassenger(p1);
Passenger p2 = new Passenger();
Ticket ticket = cashier.pushTicket("上海","婺源",3, 10);
p2.setTicket(ticket);
bus.addPassenger(p2);
Passenger p3 = new Passenger();
bus.addPassenger(p3);
cashier.iterator();
Passenger p4 = new Passenger();
bus.addPassenger(p4);
bus.removePassenger(p2);
cashier.iterator();
}
}
定義
提供一種方法順序訪問一個聚合對象中各個元素袍辞,而又不暴露該對象的內(nèi)部表示。