@@ -8,6 +8,7 @@ catalog: true
88tags :
99 - Android
1010 - MVP
11+ - theMVP
1112 - 设计模式
1213---
1314
@@ -61,7 +62,7 @@ MVP模式虽然被大力推广和使用,但是他必然也是有缺点的,
6162
6263先看一下我改造过后的theMVP模式的原理图
6364
64- ![ 这里写图片描述] ( //img-blog.csdn.net/20180320141401403?watermark/2/text/Ly9ibG9nLmNzZG4ubmV0L3lrYjE5ODkxMjMw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70 )
65+ ![ 这里写图片描述] ( https://ykbjson.github.io/blogimage/mvppicture2/97E4FABB-B41C-4637-8108-2ECAFDBA4E8E.png )
6566
6667theMVP模式的创造者在他的文章里面提到了这个问题,他页提到了解决方法,使用集合,但是他似乎并没去尝试,或者尝试了,只是太忙了,没时间分享给大家而已。虽然我想给这个模式改个名字,可是还是算了吧,毕竟不属于我的创作,我只是个搬运工而已。所以,后面还是叫他theMVP模式吧。
6768
@@ -71,25 +72,26 @@ theMVP模式的创造者在他的文章里面提到了这个问题,他页提
7172
7273先看看包结构的变化(请忽略我蹩脚的命名)
7374
74- ![ 这里写图片描述] ( //img-blog.csdn.net/2018032014351686?watermark/2/text/Ly9ibG9nLmNzZG4ubmV0L3lrYjE5ODkxMjMw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70 )
75+ ![ 这里写图片描述] ( https://ykbjson.github.io/blogimage/mvppicture2/package_info_image.jpeg )
7576
7677首先加入了两个注解 ModelBinderRouter、ViewBinderRouter
7778
7879ModelBinderRouter
7980
80- ![ 这里写图片描述] ( //img-blog.csdn.net/20180320143700887?watermark/2/text/Ly9ibG9nLmNzZG4ubmV0L3lrYjE5ODkxMjMw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70 )
81+ ![ 这里写图片描述] ( https://ykbjson.github.io/blogimage/mvppicture2/model_binder_router_image.jpeg )
8182
8283只是声明Model需要的DataBinder的class,便于在Model变化的时候,Presenter找到对应的DataBinder操作View。
8384
8485ViewBinderRouter
8586
86- ![ 这里写图片描述] ( //img-blog.csdn.net/20180320144018207?watermark/2/text/Ly9ibG9nLmNzZG4ubmV0L3lrYjE5ODkxMjMw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70 )
87+ ![ 这里写图片描述] ( https://ykbjson.github.io/blogimage/mvppicture2/view_binder_router_image.jpeg )
8788
8889这里声明了Presenter需要包含的Delegate和DataBinder的class,以便于Presenter在合适的时候创建和关联对应的Delegate和DataBinder。
8990
9091其次,改动最大的Presenter实现类(太长的类只能贴代码,mac上居然没有可以滚动截取AndroidStudio内容的软件)
9192
9293ActivityPresenter
94+
9395```
9496public abstract class ActivityPresenter<T extends IDelegate> extends AppCompatActivity {
9597 protected Map<String, DataBinder> binderMap ;
@@ -181,13 +183,13 @@ FragmentPresenter和ActivityPresenter类似,我Github的demo里有完整代码
181183
182184Activity-Presenter
183185
184- ![ 这里写图片描述] ( //img-blog.csdn.net/20180320162155173?watermark/2/text/Ly9ibG9nLmNzZG4ubmV0L3lrYjE5ODkxMjMw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70 )
186+ ![ 这里写图片描述] ( https://ykbjson.github.io/blogimage/mvppicture2/activity_presenter_image.jpeg )
185187
186188这个很简单啦,声明注解,构造Model,根据Model改变操作Delegate。
187189
188190Delegate
189191
190- ![ 这里写图片描述] ( //img-blog.csdn.net/20180320162501394?watermark/2/text/Ly9ibG9nLmNzZG4ubmV0L3lrYjE5ODkxMjMw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70 )
192+ ![ 这里写图片描述] ( https://ykbjson.github.io/blogimage/mvppicture2/delegate_image.jpeg )
191193
192194
193195这个就更简单啦,初始化View,定义一些操作View的方法供外部调用等等。
@@ -196,21 +198,21 @@ Delegate
196198
197199ArticleDataBinder
198200
199- ![ 这里写图片描述] ( //img-blog.csdn.net/2018032016274785?watermark/2/text/Ly9ibG9nLmNzZG4ubmV0L3lrYjE5ODkxMjMw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70 )
201+ ![ 这里写图片描述] ( https://ykbjson.github.io/blogimage/mvppicture2/article_data_binder_image.jpeg )
200202
201203ColorDataBinder
202204
203- ![ 这里写图片描述] ( //img-blog.csdn.net/20180320162859482?watermark/2/text/Ly9ibG9nLmNzZG4ubmV0L3lrYjE5ODkxMjMw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70 )
205+ ![ 这里写图片描述] ( https://ykbjson.github.io/blogimage/mvppicture2/color_data_binder_image.jpeg )
204206
205207两个Model
206208
207209Article
208210
209- ![ 这里写图片描述] ( //img-blog.csdn.net/2018032016301023?watermark/2/text/Ly9ibG9nLmNzZG4ubmV0L3lrYjE5ODkxMjMw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70 )
211+ ![ 这里写图片描述] ( https://ykbjson.github.io/blogimage/mvppicture2/article_model_image.jpeg )
210212
211213ColorModel
212214
213- ![ 这里写图片描述] ( //img-blog.csdn.net/20180320163049678?watermark/2/text/Ly9ibG9nLmNzZG4ubmV0L3lrYjE5ODkxMjMw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70 )
215+ ![ 这里写图片描述] ( https://ykbjson.github.io/blogimage/mvppicture2/color_model_image.jpeg )
214216
215217最后实现的效果就是,当Article属性改变,Presenter会找到ArticleDataBinder去操作Delegate,改变显示的长文本内容或者SnackBar的内容;当ColorModel改变的时候,Presenter会找到ColorDataBinder去操作Delegate,改变显示的长文本内容的字体颜色。到这里,算是解决了一个View对应多个Model,Model之间互不关联的需求吧。完整的实现请移步去我的github看代码。
216218
0 commit comments