四、外观模式

概念

为复杂的子系统提供一个统一的对外接口,通过这个接口,能更方便、更高效地访问这些子系统,而不需要关心它们内部的复杂逻辑。

应用效果

基本结构

1)外观类‏(Facade):؜对外提供统一接口,؜封装子系统的调用

2)子系统‏类(Subsyst؜em):负责自身的؜业务逻辑处理,通常⁡不会对外暴露

3)客户端(Client):通过外观类来使用子系统的功能

代码实现

以 ‏“数据库操作封装”؜ 为例

定义子系统

1)定义实体类

public class User {
    private int id;
    private String name;

    public User(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }
}

2)定义 DAO 接口

public interface UserDAO {
    void insert(User user);
    User findById(int id);
    void update(User user);
    void delete(int id);
}

3)实现 DAO 接口

public class UserDAOImpl implements UserDAO {
    private Map<Integer, User> database = new HashMap<>();

    public void insert(User user) {
        database.put(user.getId(), user);
        System.out.println("插入用户:" + user.getName());
    }

    public User findById(int id) {
        System.out.println("根据 ID 查询用户:" + id);
        return database.get(id);
    }

    public void update(User user) {
        database.put(user.getId(), user);
        System.out.println("更新用户:" + user.getName());
    }

    public void delete(int id) {
        User removed = database.remove(id);
        System.out.println("删除用户:" + (removed != null ? removed.getName() : "未知"));
    }
}

定义外观类

将复杂的数据库调用包装成对业务开发更友好的接口,降低调用门槛

public class UserServiceFacade {
    private UserDAO userDAO;

    public UserServiceFacade() {
        this.userDAO = new UserDAOImpl(); // 实际开发中可注入
    }

    public void createUser(int id, String name) {
        User user = new User(id, name);
        userDAO.insert(user);
    }

    public void viewUser(int id) {
        User user = userDAO.findById(id);
        if (user != null) {
            System.out.println("用户信息:ID=" + user.getId() + ",姓名=" + user.getName());
        } else {
            System.out.println("未找到对应的用户");
        }
    }

    public void renameUser(int id, String newName) {
        User user = userDAO.findById(id);
        if (user != null) {
            User updatedUser = new User(id, newName);
            userDAO.update(updatedUser);
        } else {
            System.out.println("无法重命名,用户不存在");
        }
    }

    public void removeUser(int id) {
        userDAO.delete(id);
    }
}

客户端调用

public class Client {
    public static void main(String[] args) {
        UserServiceFacade userService = new UserServiceFacade();

        userService.createUser(1, "鱼皮");
        userService.viewUser(1);
        userService.renameUser(1, "Yes");
        userService.viewUser(1);
        userService.removeUser(1);
        userService.viewUser(1);
    }
}

优缺点

优点

1)简化调用逻辑

2)降低耦合度

3)有利于分层架构设计

缺点

1)功能扩展时不够灵活:用到子系统里一些比较细的功能,就需要回头改外观类,或者绕过它

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇