디자인 모델 6 대 원칙: 단일 직책 원칙 - 환상 적 인 서 유 를 데려 간다 (1)

3596 단어
단일 직책 원칙 - 당신 을 데 리 고 환상 서 유 (1) 개폐 원칙 - 당신 을 데 리 고 환상 서 유 (2)   디 미트 원칙 - 환상 적 인 서 유 를 데려 다 줄 게 (3)
단일 직책 원칙 의 영문 이름 은 Single Responsibility Principle 이 고 줄 임 말 은 SRP 입 니 다.
     정의.      한 가지 유형 에 있어 서 유형의 직책 은 단일 하고 대외 적 으로 하나의 기능 만 제공 하 며 그 변화의 원인 은 하나 밖 에 없어 야 한다.통속 적 으로 말 하면 한 가지 유형의 함 수 는 하나의 기능 만 을 위해 서비스 하고 관련 성 이 매우 높다 는 것 이다.
    왜 단일 직책 원칙 으로
    환상 적 인 서 유 를 이용 하여 오 래 국 낚시 를 하 는 것 을 사례 로 삼다.
//
//         .cpp
//  c++
//
//  Created by     on 16/5/1.
//  Copyright © 2016  liulongling. All rights reserved.
//

#include <iostream>
#include <list>
#include <map>
using namespace std;
//    AL    

//    
class User
{
public:
    User(int id)
    {
        this->userId = id;
    }
    int getId()
    {
        return this->userId;
    }
private:
    int userId;
};



class Fishing
{
public:
    
    void fishEat()
    {
        cout<<"xx      ...."<<endl;
    }
    //      
    void insert(User user)
    {
        //      5 
        if(this->users.size() >=5)
        {
            cout<<"      "<<endl;
            return;
        }
        this->users.push_back(user);
    }
    //      
    void exit(User user)
    {
        //this->users.remove(user);
    }
private:
    list<User> users;
};


int main()
{
    Fishing fish;
    for(int i = 0 ;i<6;i++){
        User user(i+1);
        fish.insert(user);
    }
    fish.fishEat();
    return 0;
}

위의 코드 를 보면 낚시 류 가 두 가지 일 을 했 고 사용자 와 물고기 간 의 조작 을 제외 하고 사용자 가 방 에서 나 가 는 조작 도 볼 수 있다.단일 직책 원칙 의 정 의 는 대외 적 으로 한 가지 기능 만 제공 하고 두 가지 기능 을 제공 하 는 것 이다.그래서 결합 을 풀 어야 합 니 다.코드 는 다음 과 같 습 니 다:
//
//        .cpp
//  c++
//
//  Created by    
//  Copyright © 2016  liulongling. All rights reserved.
//

#include <iostream>
#include <list>


using namespace std;
//AL    

//    
class User
{
public:
    User(int id)
    {
        this->userId = id;
        this->eatTime =1;
    }
    int getId()
    {
        return this->userId;
    }
    time_t getEatTime()
    {
        return this->eatTime;
    }
private:
    int userId;
    int eatTime;
};

//    
class FishingRoom
{
public:
    FishingRoom()
    {
        this->users.clear();
    }
    //      
    void insert(User user)
    {
        cout<<"ID"<<user.getId()<<"    "<<endl;
        //      5 
        if(this->users.size() >=5)
        {
            cout<<"      "<<endl;
            return;
        }
        this->users.push_back(user);
    }
    //      
    void exit(User user)
    {
       
    }
    
    list<User> getUsers()
    {
        return this->users;
    }
private:
    list<User> users;
};


class Fishing
{
public:
    Fishing(FishingRoom* room)
    {
        this->room = room;
    }
    void fishEat()
    {
        for(User& user:this->room->getUsers())
        {
            if(user.getEatTime()>0)
            {
                cout<<"ID "<<user.getId()<<"      ...."<<endl;
            }
            sleep(2);
        }
    }
    FishingRoom* getRoom()
    {
        return this->room;
    }
private:
    FishingRoom* room;
};



int main()
{
    FishingRoom* room = new FishingRoom;
    Fishing fish(room);
    for(int i = 0 ;i<6;i++){
        User user(i+1);
        fish.getRoom()->insert(user);
    }
    fish.fishEat();
    return 0;
}

다음 편 개폐 원칙 - 환상 적 인 서 유 를 안내 합 니 다 (2)

좋은 웹페이지 즐겨찾기