您的位置:首页 > 编程语言

设计模式案例代码之外观模式

2013-04-01 00:35 295 查看
转载请注明出处:http://blog.csdn.net/droyon/article/details/8744778

外观模式:提供一个统一的接口,用来访问子系统中的一群接口。外观模式定义了一个高层接口,让子系统更容易的使用。

外观模式的作用是简化接口,将客户端从组件中解耦。适配器模式也处理接口,不过是转化接口。

外观模式让我们的客户和子系统之间避免紧耦合。

森林要召开音乐会,所有的动物都要参加。开幕式所有动物都要参与唱歌。每个动物唱歌的方法不一样,比如,小花猫唱歌的方法为quack,小狗唱歌的方法为bake,小鸟的唱歌方法为sing,而且音乐会结束,要通知每个动物音乐会结束了。

主办方难道真的要一个动物一个动物的调用他们唱歌的方法吗,而且在音乐会结束时,要一个一个的通知音乐会结束吗?看看外观模式怎么帮助他们。

案例代码下载

1.Cat.java

public class Cat {
public void quack(){
System.out.println("猫:"+"喵");
}

public void goHome(){
System.out.println("猫:"+"音乐会结束,回家捉老鼠去了");
}
}


2.Dog.java

public class Dog {
public void bake(){
System.out.println("狗:"+"汪汪");
}

public void homeToGurd(){
System.out.println("狗:"+"回到主人身边,看家护院");
}
}
3.Bird.java

public class Bird {
public void sing(){
System.out.println("小鸟:"+"啊啊啊啊~");
}

public void musicIsOver(){
System.out.println("小鸟:"+"音乐会结束,回家找妈妈");
}
}


4.Sheep.java

public class Sheep {
public void shout(){
System.out.println("绵羊:"+"咩咩");
}

public void over(){
System.out.println("绵羊:"+"音乐会结束,吃草去");
}
}


5.AllthiingToMe.java

public class AllthingTakeToMe {
private Cat mCat;
private Dog mDog;
private Sheep mSheep;
private Bird mBird;
public AllthingTakeToMe(Cat cat,Dog dog,Sheep sheep,Bird bird){
mCat = cat;
mDog = dog;
mSheep = sheep;
mBird = bird;
}

public void allSing(){
mCat.quack();
mDog.bake();
mSheep.shout();
mBird.sing();
}

public void over(){
mCat.goHome();
mDog.homeToGurd();
mSheep.over();
mBird.musicIsOver();
}
}
6.Test.java

public class Test {
public static void main(String args[]){
Cat cat = new Cat();
Dog dog = new Dog();
Sheep sheep = new Sheep();
Bird bird = new Bird();

AllthingTakeToMe thingsToMe = new AllthingTakeToMe(cat, dog, sheep, bird);

System.out.println("音乐会开始,全体,预备唱~~~");
thingsToMe.allSing();

System.out.println("--------------------");

System.out.println("音乐会,结束,大家各回各家~");
thingsToMe.over();
}
}


测试结果:

音乐会开始,全体,预备唱~~~
猫:喵
狗:汪汪
绵羊:咩咩
小鸟:啊啊啊啊~
--------------------
音乐会,结束,大家各回各家~
猫:音乐会结束,回家捉老鼠去了
狗:回到主人身边,看家护院
绵羊:音乐会结束,吃草去
小鸟:音乐会结束,回家找妈妈


总结:

这个模式体现了一个原则:最少知识原则:只和你的密友谈话。不要让太多的类耦合在一起,避免修改系统的一部分,影响到其他部分。我们应该多封装方法,减少对象的引入,避免依赖太多的对象。

当需要简化并统一很大的接口或者一群复杂的接口时,使用外观模式。外观模式可以让客户从一个复杂的子系统中解耦。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息