外观模式(设计模式_12)

由来:外观模式的由来,举一个例子:研发人员做了一个系统给客户用户使用,客户用户不需要知道那么多的具体细节,客户用户访问这些,具体的细节,耦合度也比较高,所以就定义了 一个外观对象,外观对象去处理这些具体的细节,客户用户只需要去访问外观对象,的行为即可


外观模式在设计中非常的常见,这种模式可以减低耦合度,区域划分的比较灵活,不需要增加客户用户的复杂度;

我们来看几个案例来说明分析:


常规的写法:

/**
 * 创建一个煮菜的类
 * @author Liudeli
 */
public class Cook {

    /**
     * 此方法是煮菜的行为
     */
    public void doMethod() {
        System.out.println("煮好了一条鱼,煮熟了一只鸡,烤完了一头猪....");
    }

}

/**
 * 定义一个买菜类
 * @author Liudeli
 */
public class Food {

    /**
     * 此方法是买菜的行为
     */
    public void doMethod() {
        System.out.println("买了一条鱼,买了一只鸡,买了一头猪....");
    }

}

/**
 * 创建一个洗菜的类
 * @author Liudeli
 */
public class Wash {

    /**
     * 此方法是洗菜的行为
     */
    public void doMethod() {
        System.out.println("洗好了一条鱼,洗干净一只鸡,洗完了一头猪....");
    }

}

/**
 * 测试程序
 * @author Liudeli
 *
 */
public class Main {

    public static void main(String[] args) {

        Food food = new Food();
        food.doMethod();

        Wash wash = new Wash();
        wash.doMethod();

        Cook cook = new Cook();
        cook.doMethod();

    }

}

执行结果:
这里写图片描述


修改成外观模式:

/**
 * 定义一个买菜类
 * @author Liudeli
 */
public class Food {

    /**
     * 此方法是买菜的行为
     */
    public void doMethod() {
        System.out.println("买了一条鱼,买了一只鸡,买了一头猪....");
    }

}

/**
 * 创建一个洗菜的类
 * @author Liudeli
 */
public class Wash {

    /**
     * 此方法是洗菜的行为
     */
    public void doMethod() {
        System.out.println("洗好了一条鱼,洗干净一只鸡,洗完了一头猪....");
    }

}

/**
 * 创建一个煮菜的类
 * @author Liudeli
 */
public class Cook {

    /**
     * 此方法是煮菜的行为
     */
    public void doMethod() {
        System.out.println("煮好了一条鱼,煮熟了一只鸡,烤完了一头猪....");
    }

}

/**
 * 定义一个外观类
 * @author Liudeli
 */
public class Appearance {

    /**
     * 外观类的执行方法,用于执行具体细节操作,给客户呈现的就是此方法
     */
    public void doMethod() {

        Food food = new Food();
        food.doMethod();

        Wash wash = new Wash();
        wash.doMethod();

        Cook cook = new Cook();
        cook.doMethod();

    }

}

/**
 * 用户客户调用外观类即可,其他具体细节不需要关系
 * @author Liudeli
 *
 */
public class Main {

    public static void main(String[] args) {

        // 创建外观对象,执行方法

        Appearance appearance = new Appearance();
        appearance.doMethod();

    }

}

运行结果:
这里写图片描述


/**
 * 定义一个ClassA类
 * @author Liudeli
 */
public class ClassA {

    /**
     * 此方法就是简单的打印一句话
     */
    public void methodA() {
        System.out.println("ClassA methodA()...");
    }

}

/**
 * 定义一个ClassB类
 * @author Liudeli
 */
public class ClassB {

    /**
     * 此方法就是简单的打印一句话
     */
    public void methodB() {
        System.out.println("ClassB methodB()...");
    }

}

/**
 * 定义一个ClassC类
 * @author Liudeli
 */
public class ClassC {

    /**
     * 此方法就是简单的打印一句话
     */
    public void methodC() {
        System.out.println("ClassC methodC()...");
    }

}

/**
 * 定义一个外观类,将ClassA,ClassB,ClassC,统一调用
 * @author Liudeli
 */
public class Appearance {

    /**
     *  此方法用于调用ClassA,ClassB,ClassC类里面的方法
     */
    public void method() {

        ClassA classA = new ClassA();
        classA.methodA();

        ClassB classB = new ClassB();
        classB.methodB();

        ClassC classC = new ClassC();
        classC.methodC();
    }

}

/**
 * 模拟客户端测试程序
 * @author Liudeli
 */
public class Main {

    public static void main(String[] args) {
        // 其他的具体细节,客户不需要知道,因为都交给了外观类
        // 调用外观类即可
        Appearance appearance = new Appearance();
        appearance.method();
    }

}

运行结果:
这里写图片描述


我们会发现外观模式代理模式是多么的相似,其实认真去分析确实很相似,只是他们的应用场景不一样


谢谢大家的观看,更多精彩技术博客,会不断的更新,请大家访问,
刘德利CSDN博客, http://blog.csdn.net/u011967006

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值