抽象工厂的测试:
- RepositoryFactoryProvider dbProvider = new DatabaseRepositoryFactory();
- dbProvider.create().save(new Object());
- RepositoryFactoryProvider cacheProvider = new CacheRepositoryFactory();
- cacheProvider.create().save(new Object());
- RepositoryFactoryProvider fileProvider = new FileRepositoryFactory();
- fileProvider.create().save(new Object());
抽象工厂把工厂也进行了抽象话,所以添加一个新的Repository的话,只须要新增一个RepositoryFactory即可,原有代码不须要修改。
简单工厂的应用
装潢者模式
装潢者模式的感化就在于它可以在不改变原有类的基本上动态地给类添加新的功能。之前写过一篇 经由过程源码分析MyBatis的缓存 文┞仿,mybatis中的query就是应用了装潢者设计模式。
用一段简单的代率攀来模仿一下mybatis中query的实现道理:
- @Data
- @AllArgsConstructor
- @ToString
- class Result { // 萌芽结不雅类,相当于一个domain
- private Object obj;
- private String sql;
- }
- public interface Query { // 萌芽接口,有简单萌芽懈弛存萌芽
- Result query(String sql);
- }
- public class SimpleQuery implements Query { // 简单萌芽,相当于直接萌芽数据库,这里直接返回Result,相当于是数据库萌芽的结不雅
- @Override
- public Result query(String sql) {
- return new Result(new Object(), sql);
- }
- }
- public class CacheQuery implements Query { // 缓存萌芽,如不雅萌芽雷同的sql,不直接萌芽数据库,而是返回map中存在的Result
- private Query query;
- private Map cache = new HashMap<>();
- public CacheQuery(Query query) {
- this.query = query;
- }
- @Override
- public Result query(String sql) {
- if(cache.containsKey(sql)) {
- return cache.get(sql);
- }
- Result result = query.query(sql);
- cache.put(sql, result);
- return result;
- }
- }
测试:
这里CacheQuery就是一个装潢类,SimpleQuery是一个被装潢者。我们经由过程装潢者设计模式动态地给SimpleQuery添加了缓存功能,而不须要修改SimpleQuery的代码。
当然,装潢者模式也出缺点,就是会存在太多的类。
推荐阅读
自负年夜 Google 的人工智能 AlphaGO 成为围棋界的百胜将近开端,AI(Artificial Intelligence,人工智能)这两个英文字,刹那间成为科技业最热点的关键字之一。而就在2017岁首?年代,早在>>>详细阅读
本文标题:记录自己理解的一些设计模式
地址:http://www.17bianji.com/lsqh/34663.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示