外观模式概述
外观模式是指将一些想要隐藏的业务让一个外观角色来调用,主要业务中只要调用这个外观角色即可
外观模式代码实现
若,有一家人,不想考虑每天是买什么菜好,于是将买菜的工作交给家里的保姆实现。
这里就是将买菜的业务隐藏,让保姆去调用,而这家的主人只需要从保姆这里去拿到菜就可以。
买菜业务
//设计模式之外观模式
//要隐藏的一些业务
public class BuyThings {
public void buyMeat(){
System.out.println("购买肉质品");
}
public void buyVegetables(){
System.out.println("购买蔬菜");
}
}
外观角色
/**
* 外观模式中的外观角色
*/
public class GetThings {
private BuyThings buyThings;
public GetThings(){
this.buyThings = new BuyThings();
}
public void toGetThing(){
buyThings.buyMeat();
buyThings.buyVegetables();
}
}
主要业务
GetThings getThings = new GetThings();
getThings.toGetThing();
总结
外观模式也是将耦合降低,并让主要业务不用关注过多的细节。平时的三层架构中使用的也是外观模式,这个模式会在我们不经意间使用,可见其方便性。
建造者模式概述
建造者模式是关于一些创建的动作,将其放在向导角色中执行,主要业务就不用关注创建的动作。
建造者模式分为抽象建造角色、具体建造角色和向导角色,抽象建造角色负责规范建造角色的创建动作,具体建造角色负责具体的创建的动作,向导角色负责调用创建角色的创建动作。
建造者模式代码实现
比如在一个餐厅中,菜品的制作过程往往是被规范好的,由厨师来做具体的烹饪。
抽象建造角色
抽象建造角色应该将所有的想要的创建动作定义好,如此具体建造角色就必须要实现这些定义好的抽象方法,实现对建造角色的规范
此处规定,做菜一定要加油和盐
/**
* 抽象建造者对象
*/
public abstract class DishBuilder {
public abstract void addSalt();
public abstract void addOil();
}
具体建造角色
//建造者模式中的建造角色
public class FishBuilder extends DishBuilder {
@Override
public void addSalt() {
System.out.println("添加深井盐");
}
@Override
public void addOil() {
System.out.println("添加花生油");
}
}
向导角色
向导角色是负责调用具体建造角色的建造动作的
//建造者模式的向导角色
public class DishDirector {
private DishBuilder dishBuilder;
public DishDirector(FishBuilder fishBuilder){
this.dishBuilder = fishBuilder;
}
public void doDish(){
dishBuilder.addOil();
dishBuilder.addSalt();
}
}
主要业务
FishBuilder fishBuilder = new FishBuilder();
DishDirector director = new DishDirector(fishBuilder);
director.doDish();
在具体业务中,只要创建一个向导角色并指定其具体建造角色就可以完成业务,无需关注建造细节。
总结
建造者模式其实也是使用了外观模式的思想,它们的共同目的都是实现高内聚低耦合,实现业务的便捷和灵活性。