设计模式学习笔记—外观模式
2016-01-21 18:36
267 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LiynGu/article/details/50556769
外观模式(Facade pattern)
首先,为什么我们需要外观模式?
答:接口太多了,需要一个新的接口去统一这些接口。
我有个疑问就是,如果代码接口变多,显得有些乱,去统一一下接口不是很正常的事情吗?如果代码设计时某些类有明显的从属关系,为其设计一个统一管理的接口也是很正常的吧。
抱着这个疑问,我去翻了wiki。
然而,也是简单的去统一接口。
但是,并不能说明外观模式简单,如果项目的代码量多到一定程度,而且是一个比较糟糕的设计,或者是要为另一个项目去提供一套新的接口,这个的话很明显并不简单。
这么想的话,平时用的三层架构应该就是外观模式了,对 UI 层只提供 service 的接口,不关注 service 的实现,同样,service 也不去关注 dao 的实现, 只关注 dao 的接口。
既然是学习笔记还是写点代码吧。
这是两个 dao 的不完整设计
public interface BookDao { Book getById(int id); List<Book> getByUserId(int userId); void save(Book book); void save(Book book, int userId); }
public interface UserDao { User getByLogin(String username, String password); User getById(int id); void save(User user); }
然后是 UserService 及其实现
public interface UserService { void login(String username, String password); List<Book> updateUserBooks(User user); }
public class UserServiceImpl implements UserService { private UserDao userDao = new UserDaoImpl(); private BookDao bookDao = new BookDaoImpl(); @Override void login(String username, String password) { User user = userDao.getByLogin(username, password); if (user == null) { // 用异常的方式处理用户登录失败 throw new RuntimeException("login error"); } user.addBooks(bookDao.getByUserId(user.getId())); } @Override public List<Book> updateUserBooks(User user) { // 这种代码写得很糟糕 for(Book book : user.getBooks()) { // 如果 dao 不提供 saveAll 方法的话,就只能用这个了 bookDao.save(book, user.getId()); } // 最后把更新后的结果返回,不管前端用不用的到 return bookDao.getByUserId(user.getId); } }
这样的话就用 service 做了 dao 的外观,如果代码更加复杂就再加一层 service 作为外观这个样子,当调用的时候就是这样了。
UserService userService = new UserServiceImpl(); try { User user = userService.login("test", "123"); user.addBook(new Book("new book")); userService.updateUserBooks(user); } catch (RuntimeException e) { // TODO: handle exception }
感觉的话还是那样,外观模式的代码写起来会很简单,思想和类图也很简单,但真正设计项目或者项目重构的时候,就会有难度了,这个设计模式,应该是那种只能多写项目才能学会的设计模式(个人感觉)。
The end.
相关文章推荐
- 设计模式学习笔记(十一)——Facade外观模式
- 设计模式学习笔记之四---外观模式
- 设计模式学习笔记之外观模式
- 设计模式学习笔记之适配器模式、外观模式
- 【设计模式学习笔记十一】【结构型模式】【外观模式(Facade)】
- (转载)设计模式学习笔记(十一)——Facade外观模式
- 设计模式学习笔记(一)--Facade外观模式
- 设计模式 学习笔记(5)迪米特法则、外观模式、建造者模式
- 设计模式学习笔记(十一)——Facade外观模式
- [学习笔记]设计模式[6]-{适配器模式&外观模式}
- 设计模式学习笔记--Façade外观模式
- 设计模式学习笔记-外观模式
- java学习笔记-设计模式10(外观模式)
- HeadFirst 设计模式学习笔记7--适配器模式和外观模式
- 八、外观模式——设计模式学习笔记
- 学习设计模式笔记--外观模式
- HeadFirst 设计模式学习笔记6--适配器模式和外观模式
- HeadFirst 设计模式学习笔记7--适配器模式和外观模式
- 步步为营 .NET 设计模式学习笔记 十六、Facade(外观模式)
- 设计模式学习笔记(十一)——Facade外观