设计模式,外观模式、建造者模式

73 阅读3分钟

外观模式概述

外观模式是指将一些想要隐藏的业务让一个外观角色来调用,主要业务中只要调用这个外观角色即可

外观模式代码实现

若,有一家人,不想考虑每天是买什么菜好,于是将买菜的工作交给家里的保姆实现。

这里就是将买菜的业务隐藏,让保姆去调用,而这家的主人只需要从保姆这里去拿到菜就可以。

买菜业务

//设计模式之外观模式
//要隐藏的一些业务
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();

在具体业务中,只要创建一个向导角色并指定其具体建造角色就可以完成业务,无需关注建造细节。

总结

建造者模式其实也是使用了外观模式的思想,它们的共同目的都是实现高内聚低耦合,实现业务的便捷和灵活性。