一、MVC设计模式
1、MVC是什么?
Model-View-Controller,即模型-视图-控制器,是软件架构设计模式中最常用的一种,通常用于开发桌面和网络应用程序。
2、MVC的优点
将应用程序划分为三个部分:模型、视图和控制器,实现了数据和数据表示的分离,有利于程序的可维护性、可扩展性和可重用性。
3、MVC的相关代码示例:
public class StudentListAdapter extends BaseAdapter { private ListmStudentList; private Context mContext; public StudentListAdapter(List studentList, Context context) { mStudentList = studentList; mContext = context; } @Override public int getCount() { return mStudentList.size(); } @Override public Object getItem(int position) { return mStudentList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if (convertView == null) { convertView = LayoutInflater.from(mContext).inflate(R.layout.item_student, null); viewHolder = new ViewHolder(); viewHolder.mNameTv = convertView.findViewById(R.id.tv_name); viewHolder.mAgeTv = convertView.findViewById(R.id.tv_age); viewHolder.mGenderTv = convertView.findViewById(R.id.tv_gender); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } Student student = (Student) getItem(position); viewHolder.mNameTv.setText(student.getName()); viewHolder.mAgeTv.setText(String.valueOf(student.getAge())); viewHolder.mGenderTv.setText(student.getGender()); return convertView; } private class ViewHolder { TextView mNameTv; TextView mAgeTv; TextView mGenderTv; } }
二、MVP设计模式
1、MVP是什么?
Model-View-Presenter,即模型-视图-表示器,是一种针对User Interface设计的设计模式,其主要目的是分离视图和业务逻辑,增强应用程序的可维护性和测试性。
2、MVP的优点
优点主要集中在几点:界面和业务逻辑分离、封装业务逻辑层,有利于代码重用和测试。
3、MVP的相关代码示例:
public class LoginPresenter { private ILoginView mLoginView; private LoginModel mLoginModel; public LoginPresenter(ILoginView loginView) { mLoginView = loginView; mLoginModel = new LoginModel(); } public void login(String username, String password) { boolean result = mLoginModel.login(username, password); if (result) { mLoginView.onLoginSuccess(); } else { mLoginView.onLoginFailed(); } } }
三、MVVM设计模式
1、MVVM是什么?
Model-View-ViewModel,即模型-视图-视图模型,是一种 UI 架构模式,其目的是分离视图的状态和行为,将其抽象出来,方便维护和测试。
2、MVVM的优点
它使界面逻辑与业务逻辑分离,有利于代码重用、提高代码的可维护性和可测试性。
3、MVVM的相关代码示例:
public class UserViewModel extends BaseObservable { private User mUser; public UserViewModel(User user) { mUser = user; } @Bindable public String getUserName() { return mUser.getName(); } public void setUserName(String userName) { mUser.setName(userName); notifyPropertyChanged(BR.userName); } @Bindable public int getUserAge() { return mUser.getAge(); } public void setUserAge(int userAge) { mUser.setAge(userAge); notifyPropertyChanged(BR.userAge); } }
四、单例设计模式
1、单例模式是什么?
单例模式是一种常用的创建型设计模式,在应用程序运行时使数据只能被实例化一次,从而节省大量的系统资源。
2、单例模式的优点
主要有两点:节省系统资源、保证数据的一致性。
3、单例模式的相关代码示例:
public class Singleton { private static Singleton sInstance; private Singleton() { } public static Singleton getInstance() { if (sInstance == null) { synchronized (Singleton.class) { if (sInstance == null) { sInstance = new Singleton(); } } } return sInstance; } }
五、观察者模式
1、观察者模式是什么?
观察者模式是一种对象行为模式,它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。
2、观察者模式的优点
主要有两点:松耦合、扩展性强。
3、观察者模式的相关代码示例:
public interface Subject { void registerObserver(Observer observer); void removeObserver(Observer observer); void notifyObservers(); } public interface Observer { void update(float temperature, float humidity, float pressure); } public class WeatherData implements Subject { private ListmObserverList; private float mTemperature; private float mHumidity; private float mPressure; public WeatherData() { mObserverList = new ArrayList<>(); } @Override public void registerObserver(Observer observer) { mObserverList.add(observer); } @Override public void removeObserver(Observer observer) { mObserverList.remove(observer); } @Override public void notifyObservers() { for (Observer observer : mObserverList) { observer.update(mTemperature, mHumidity, mPressure); } } public void setMeasurements(float temperature, float humidity, float pressure) { mTemperature = temperature; mHumidity = humidity; mPressure = pressure; measurementsChanged(); } private void measurementsChanged() { notifyObservers(); } }