1. 程式人生 > 實用技巧 >專案控制檯和瀏覽器輸出亂碼解決辦法

專案控制檯和瀏覽器輸出亂碼解決辦法

1、簡介

使抽象和實現進行解耦,使得二者可以獨立變化。通過抽象化和實現化之間的橋接結構實現解耦。


核心程式碼: 抽象類依賴實現類

一個簡單的例子就是輪渡,輪渡公司可以過江,你也要過江,但你又不會游泳,這時就需要有個具體幹事的東西,讓輪渡公司去選擇,你是要乘快艇、小船、還是遊艇過江。

這裡的遊艇就相當於一個橋樑,抽象類和實現類都通過遊艇進行關聯,由遊客選擇遊艇型別、選擇遊艇級別和價位。然後遊艇由父類遊艇管理,遊客僅供使用[呼叫].

2、實現

/**
 * 輪船公司介面
 * @author Administrator
 */
public abstract class ShippingCompany {
	
	protected Shipping shipping;
	
	public ShippingCompany(Shipping shipping) {
		this.shipping = shipping;
	}
	
	public abstract void travel();
}

/**
 * 輪船介面
 * @author Administrator
 */
public interface Shipping {

	public void travelRiver(int level, double money);
}

/**
 * 郵輪類
 * @author Administrator
 */
public class Cruise implements Shipping{

	@Override
	public void travelRiver(int level, double money) {
		System.out.println();
		System.out.println(String.format("I'm Cruise level: %d, cost: %f", level, money));
	}
}

/**
 * 遊艇類
 * @author Administrator
 */
public class SpeedBoat implements Shipping{
	
	@Override
	public void travelRiver(int level, double money) {
		System.out.println(String.format("I'm SpeedBoat level: %d, cost: %f", level, money));
	}
}

/**
*遊客類
*/
public class MrLiu extends ShippingCompany{
	
	private int level;
	private double money;
	
	public MrLiu(int level, double money, Shipping shipping) {
		super(shipping);
		this.level = level;
		this.money = money;
	}
	
	
	@Override
	public void travel() {
		shipping.travelRiver(level, money);
	}
}

// Test
int level = 3;
double money = 88888888;
Shipping cruise = new Cruise();
MrLiu liu1 = new MrLiu(level, money, cruise);
Shipping speedBoat = new SpeedBoat();
MrLiu liu2 = new MrLiu(level, money, speedBoat);
liu1.travel();
liu2.travel();