本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

Java~设计模式之外观模式 || 亲,特意为你服务

发布于2020-11-19 20:22     阅读(580)     评论(0)     点赞(7)     收藏(1)


文章目录

外观模式

  • 外观模式实现隐藏系统的具体实现,并向客户端提供了一个可以访问系统的接口
  • 主要特点: 降低访问内部系统的复杂度,简化客户端的访问, 客户端不与系统耦合,客户端接触的是外观类, 而外观类与系统耦合。
  • 优点: 1、减少系统相互依赖。 2、提高灵活性。 3、提高了安全性。
  • 缺点:不符合开闭原则(开放扩展关闭修改),如果要改东西很麻烦,继承重写都不合适。因为我原本只需要修改内部系统即可, 但是现在还得修改外观类
  • 应用实例: 1、去医院看病,可能要去挂号、门诊、划价、取药,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理,就很方便。 2、JAVA 的三层开发模式。3、饭店的菜单

实现

  • 我将以饭店的菜单为例子实现外观模式
  • 我们每次去饭店吃点都是看菜单来点菜, 很少去厨房点菜, 其实这就是一个外观模式, 菜单就是外观类, 厨房就是系统内部
  • 避免闲人进厨房也就提高了饭菜的安全性, 但是厨房要新增加菜品就必须修改菜单, 改东西自然麻烦下了
    在这里插入图片描述
  • 内部系统

abstract class Dish {

    protected String name;

    abstract public void show();
}

class Pork extends Dish {

    public Pork() {
        name = "炖猪肉";
    }

    @Override
    public void show() {
        System.out.println(name);
    }
}

class Mutton extends Dish {

    public Mutton() {
        name = "炖羊肉";
    }

    @Override
    public void show() {
        System.out.println(name);
    }
}

class Beef extends Dish {

    public Beef() {
        name = "炖牛肉";
    }

    @Override
    public void show() {
        System.out.println(name);
    }
}

class Fish extends Dish {

    public Fish() {
        name = "清真鱼肉";
    }

    @Override
    public void show() {
        System.out.println(name);
    }
}

class Dumpling extends Dish {

    public Dumpling() {
        name = "水饺";
    }

    @Override
    public void show() {
        System.out.println(name);
    }
}

class Coke extends Dish {

    public Coke() {
        name = "可乐";
    }

    @Override
    public void show() {
        System.out.println(name);
    }
}

class Orange extends Dish {

    public Orange() {
        name = "橙汁";
    }

    @Override
    public void show() {
        System.out.println(name);
    }
}
  • 外观类
public class Menu {

    private Dish pork;
    private Dish mutton;
    private Dish beef;
    private Dish fish;
    private Dish dumpling;
    private Dish coke;
    private Dish orange;

    public Menu() {
        init();
    }

    private void init() {
        pork = new Pork();
        mutton = new Mutton();
        beef = new Beef();
        fish = new Fish();
        dumpling = new Dumpling();
        coke = new Coke();
        orange = new Orange();
    }

    //套餐A
    public void setMealA() {
        System.out.println("===套餐A: ");
        pork.show();
        mutton.show();
        beef.show();
        coke.show();
    }

    //套餐B
    public void setMealB() {
        System.out.println("===套餐B:");
        fish.show();
        dumpling.show();
        orange.show();
    }

    //套餐C
    public void setMealC() {
        System.out.println("===套餐C:");
        beef.show();
        fish.show();
        pork.show();
    }
}
  • 客户端
public class Client {

    public static void main(String[] args) {
        //menu就好比外观
        Menu menu = new Menu();

        //通过外观menu去访问菜品
        menu.setMealA();
        menu.setMealB();
        menu.setMealC();
    }
}
  • 测试
    在这里插入图片描述


所属网站分类: 技术文章 > 博客

作者:gogogo

链接:http://www.javaheidong.com/blog/article/899/d731d5a1cfd6b0422e65/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

7 0
收藏该文
已收藏

评论内容:(最多支持255个字符)