MVC-MVP-MVVM詳解

1 / 1

M-V-C分別是什么 代碼舉例

1 / 1

MVC是一種常見的架構(gòu)模式飞傀,由三個主要組件組成:

  • Model:表示應用程序的數(shù)據(jù)和業(yè)務邏輯拍鲤。
  • View:表示應用程序的用戶界面绘面。
  • Controller:表示應用程序的邏輯控制器弟孟,處理來自用戶界面的輸入并更新Model和View上荡。

以下是MVC的一個簡單示例代碼:

java

// Model
public class User {
    private String name;
    private String email;
    
    // Getters and Setters
}

// View
public class UserView {
    public void displayUser(String name, String email) {
        System.out.println("Name: " + name);
        System.out.println("Email: " + email);
    }
}

// Controller
public class UserController {
    private User model;
    private UserView view;
    
    public UserController(User model, UserView view) {
        this.model = model;
        this.view = view;
    }
    
    public void updateUser(String name, String email) {
        model.setName(name);
        model.setEmail(email);
    }
    
    public void displayUser() {
        String name = model.getName();
        String email = model.getEmail();
        view.displayUser(name, email);
    }
}

// Usage
public static void main(String[] args) {
    User user = new User();
    user.setName("John");
    user.setEmail("john@example.com");
    
    UserView userView = new UserView();
    UserController userController = new UserController(user, userView);
    
    // Update user information
    userController.updateUser("Jane", "jane@example.com");
    
    // Display user information
    userController.displayUser();
}

在這個例子中讶泰,Model是User類扎酷,View是UserView類檐涝,Controller是UserController類。UserController充當中介者霞玄,協(xié)調(diào)User和UserView之間的通信骤铃。在main函數(shù)中,我們創(chuàng)建了一個User實例坷剧,并使用UserController來更新和顯示用戶信息惰爬。

1 / 1

在android中M-V-P分別是什么 代碼舉例

1 / 1

在Android開發(fā)中,MVP是一種常見的架構(gòu)模式惫企,由三個主要組件組成:

  • Model:表示應用程序的數(shù)據(jù)和業(yè)務邏輯撕瞧。
  • View:表示應用程序的用戶界面。
  • Presenter:表示應用程序的邏輯控制器狞尔,處理來自用戶界面的輸入并更新Model和View丛版。

以下是MVP的一個簡單示例代碼:

java

// Model
public class User {
    private String name;
    private String email;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

// View
public interface UserView {
    void showUser(User user);
}

// Presenter
public class UserPresenter {
    private User model;
    private UserView view;

    public UserPresenter(User model, UserView view) {
        this.model = model;
        this.view = view;
    }

    public void updateUser(String name, String email) {
        model.setName(name);
        model.setEmail(email);
        view.showUser(model);
    }
}

// Usage
public class MainActivity extends AppCompatActivity implements UserView {
    private EditText nameEditText;
    private EditText emailEditText;
    private Button saveButton;
    private UserPresenter presenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Initialize views
        nameEditText = findViewById(R.id.nameEditText);
        emailEditText = findViewById(R.id.emailEditText);
        saveButton = findViewById(R.id.saveButton);

        // Initialize presenter
        User user = new User();
        presenter = new UserPresenter(user, this);

        // Set click listener on save button
        saveButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String name = nameEditText.getText().toString();
                String email = emailEditText.getText().toString();
                presenter.updateUser(name, email);
            }
        });
    }

    @Override
    public void showUser(User user) {
        nameEditText.setText(user.getName());
        emailEditText.setText(user.getEmail());
    }
}

在這個例子中,Model是User類页畦,View是UserView接口,Presenter是UserPresenter類研儒。UserPresenter充當中介者豫缨,協(xié)調(diào)User和UserView之間的通信独令。在MainActivity中,我們初始化了UserPresenter并將其與UserView關聯(lián)好芭。當用戶單擊保存按鈕時燃箭,我們使用UserPresenter來更新User并將其顯示在UserView中。在此示例中舍败,UserView是MainActivity招狸,并且實現(xiàn)了showUser方法,該方法用于顯示User信息邻薯。

1 / 1

在android中M-V-V-M分別是什么 代碼舉例

1 / 1

在Android開發(fā)中裙戏,MVVM是一種常見的架構(gòu)模式,由三個主要組件組成:

  • Model:表示應用程序的數(shù)據(jù)和業(yè)務邏輯弛说。
  • View:表示應用程序的用戶界面挽懦。
  • ViewModel:表示應用程序的邏輯控制器,處理來自用戶界面的輸入并更新Model和View木人。

以下是MVVM的一個簡單示例代碼:

java

// Model
public class User {
    private String name;
    private String email;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

// View
public class MainActivity extends AppCompatActivity {
    private EditText nameEditText;
    private EditText emailEditText;
    private Button saveButton;
    private UserViewModel viewModel;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Initialize views
        nameEditText = findViewById(R.id.nameEditText);
        emailEditText = findViewById(R.id.emailEditText);
        saveButton = findViewById(R.id.saveButton);

        // Initialize view model
        viewModel = new ViewModelProvider(this).get(UserViewModel.class);

        // Set observer on user live data
        viewModel.getUserLiveData().observe(this, new Observer<User>() {
            @Override
            public void onChanged(User user) {
                nameEditText.setText(user.getName());
                emailEditText.setText(user.getEmail());
            }
        });

        // Set click listener on save button
        saveButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String name = nameEditText.getText().toString();
                String email = emailEditText.getText().toString();
                viewModel.updateUser(name, email);
            }
        });
    }
}

// ViewModel
public class UserViewModel extends ViewModel {
    private MutableLiveData<User> userLiveData = new MutableLiveData<>();
    private User user = new User();

    public UserViewModel() {
        userLiveData.setValue(user);
    }

    public LiveData<User> getUserLiveData() {
        return userLiveData;
    }

    public void updateUser(String name, String email) {
        user.setName(name);
        user.setEmail(email);
        userLiveData.setValue(user);
    }
}

在這個例子中,Model是User類冀偶,View是MainActivity類醒第,ViewModel是UserViewModel類。UserViewModel充當中介者进鸠,協(xié)調(diào)User和MainActivity之間的通信稠曼。在MainActivity中,我們初始化了UserViewModel并將其與MainActivity關聯(lián)客年。當用戶單擊保存按鈕時霞幅,我們使用UserViewModel來更新User并將其顯示在MainActivity中。在此示例中量瓜,UserLiveData是LiveData<User>對象司恳,用于在ViewModel和View之間共享數(shù)據(jù)。當ViewModel更新User時绍傲,LiveData會自動通知View進行更新扔傅。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市烫饼,隨后出現(xiàn)的幾起案子猎塞,更是在濱河造成了極大的恐慌,老刑警劉巖杠纵,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荠耽,死亡現(xiàn)場離奇詭異,居然都是意外死亡比藻,警方通過查閱死者的電腦和手機铝量,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進店門倘屹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人款违,你說我怎么就攤上這事唐瀑。” “怎么了插爹?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵哄辣,是天一觀的道長。 經(jīng)常有香客問我赠尾,道長力穗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任气嫁,我火速辦了婚禮当窗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘寸宵。我一直安慰自己崖面,他們只是感情好,可當我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布梯影。 她就那樣靜靜地躺著巫员,像睡著了一般。 火紅的嫁衣襯著肌膚如雪甲棍。 梳的紋絲不亂的頭發(fā)上简识,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天,我揣著相機與錄音感猛,去河邊找鬼七扰。 笑死,一個胖子當著我的面吹牛陪白,可吹牛的內(nèi)容都是我干的颈走。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼拷泽,長吁一口氣:“原來是場噩夢啊……” “哼疫鹊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起司致,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤拆吆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后脂矫,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體枣耀,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了捞奕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片牺堰。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖颅围,靈堂內(nèi)的尸體忽然破棺而出伟葫,到底是詐尸還是另有隱情,我是刑警寧澤院促,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布筏养,位于F島的核電站,受9級特大地震影響常拓,放射性物質(zhì)發(fā)生泄漏渐溶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一弄抬、第九天 我趴在偏房一處隱蔽的房頂上張望茎辐。 院中可真熱鬧,春花似錦掂恕、人聲如沸拖陆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽慕蔚。三九已至,卻和暖如春斋配,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背灌闺。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工艰争, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人桂对。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓甩卓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蕉斜。 傳聞我的和親對象是個殘疾皇子逾柿,可洞房花燭夜當晚...
    茶點故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內(nèi)容