優(yōu)點:為子系統(tǒng)提供統(tǒng)一的入口噩峦,封裝子系統(tǒng)的復雜性锭沟,以便客戶端調(diào)用。
缺點:不符合開閉原則识补。
例子:比如我要吃飯族淮,飯桌上有肉,有米飯凭涂,有蔬菜祝辣,有甜品,按照操作邏輯切油,我需要煮肉蝙斜,釀酒,煮蔬菜澎胡,做甜品孕荠,這些東西都比較復雜,我需要和所有的東西都打交道攻谁,但是如果我去餐廳吃呢稚伍?是不是有服務員?想吃什么告訴服務員就行了戚宦,跟本就不需要知道這些東西復雜的制作流程个曙,服務員就是屬于一個外觀模式。
想創(chuàng)建一個食物接口受楼,包含一個食材方法:
/**
* 這是一個食物接口
*/
public interface Food {
void ingredients();
}
然后創(chuàng)建其他實體類垦搬。
肉:
import android.util.Log;
/**
* 這是一個肉實體類
*/
public class Meat implements Food {
@Override
public void ingredients() {
Log.d("TAG", "肉");
}
}
米飯:
import android.util.Log;
/**
* 這是一個米飯實體類
*/
public class Rice implements Food{
@Override
public void ingredients() {
Log.d("TAG","米飯");
}
}
蔬菜:
/**
* 這是一個蔬菜實體類
*/
public class Vegetables implements Food {
@Override
public void ingredients() {
Log.d("TAG", "蔬菜");
}
}
甜品:
import android.util.Log;
/**
* 這是一個甜品實體類
*/
public class Dessert implements Food {
@Override
public void ingredients() {
Log.d("TAG","甜品");
}
}
試試不用外觀模式調(diào)用:
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
/**
* 這是調(diào)用者
*/
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("TAG", "我要做---------------------------");
//肉
Food meat = new Meat();
meat.ingredients();
//米飯
Food rice = new Rice();
rice.ingredients();
//蔬菜
Food vegetables = new Vegetables();
vegetables.ingredients();
//甜品
Food dessert = new Dessert();
dessert.ingredients();
Log.d("TAG", "就這么多---------------------------");
}
}
結果:image.png
這樣比較麻煩呼寸,我需要和所有想吃的東西打交道,都得自己去做猴贰,去餐廳吃了对雪。
創(chuàng)建一個服務員類,把所有要自己做的東西丟給服務員做就行:
/**
* 這是一個服務員實體類
*/
public class Waiter {
public void service() {
//肉
Food meat = new Meat();
meat.ingredients();
//米飯
Food rice = new Rice();
rice.ingredients();
//蔬菜
Food vegetables = new Vegetables();
vegetables.ingredients();
//甜品
Food dessert = new Dessert();
dessert.ingredients();
}
}
調(diào)用:
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
/**
* 這是調(diào)用者
*/
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("TAG", "您好糟趾,我要點菜---------------------------");
new Waiter().service();
Log.d("TAG", "就這么多---------------------------");
}
}
結果:image.png
這樣調(diào)用者就方便多了慌植。
已完成測試甚牲!有不對的地方歡迎指出义郑,感恩。