目录
目录.png
什么是MVC
view ---- xml
model ---- 存放数据和对于数据的操作的类
controller ---- 存放数据与页面逻辑的类 比如 Activity Fragment
MVC结构
结构.png
MVC流程
C拥有M的句柄,逻辑全部由C控制
demo
github地址:https://github.com/pgyCode/MvcDemo
核心代码
Contract
public interface BookContract {
interface Model{
//模拟初始化
List<String> init();
//模拟添加
void add(String str);
}
interface Controller{
void init();
void add(String str);
}
}
Model
public class BookModel implements BookContract.Model {
//使用单例模式,防止出现多份数据
private static Object object = new Object();
public static BookModel instance;
public static BookModel getInstance() {
synchronized (object){
if (instance == null)
return new BookModel();
else
return instance;
}
}
public List<String> strings = null;
@Override
public List<String> init() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
strings = new LinkedList<>();
strings.add("1");
strings.add("2");
strings.add("3");
strings.add("4");
strings.add("5");
strings.add("6");
strings.add("7");
strings.add("8");
return strings;
}
@Override
public void add(String str) {
strings.add(str);
}
}
Controller
public class BookActivity extends AppCompatActivity implements BookContract.Controller {
private BookContract.Model model;
private ListView lst;
private BookAdapter bookAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.book);
model = BookModel.getInstance();
lst = findViewById(R.id.lst);
init();
findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
add("测试添加");
}
});
}
@Override
public void init() {
new AsyncTask<Void, Void, List<String>>(){
@Override
protected List<String> doInBackground(Void... voids) {
return model.init();
}
@Override
protected void onPostExecute(List<String> strings) {
super.onPostExecute(strings);
bookAdapter = new BookAdapter(BookActivity.this, strings);
lst.setAdapter(bookAdapter);
}
}.execute();
}
@Override
public void add(final String str) {
new AsyncTask<Void, Void, Void>(){
@Override
protected Void doInBackground(Void... voids) {
model.add(str);
return null;
}
@Override
protected void onPostExecute(Void avoid) {
super.onPostExecute(avoid);
bookAdapter.notifyDataSetChanged();
}
}.execute();
}
}