デザイン練習モード - 外観のモード

モデルの外観とは何ですか?ときに使用するには?

また、ファサードモードと呼ばれる外観モード、。実際には、日常生活の中で、そのような私たちの毎日の仕事、リーダーシップなど、多くの影の外観モデルが存在する、リーダーシップの問題は、中央(部署の上司)にコマンドをブロードキャストモジュールを開発することを決定し、真ん中が特定の実行層に割り当てられている(我々が開発しました)。リーダーは、単に受注は結果であってもよい作り、次の人が割り当てられている方法を知っておく必要がある、と誰ではありません。

シーン

  • このようなスタジオに完了したばかりのモジュール、ユーザーの役割、UIインターフェイス、スタイル上の状態の多くの部分を変更すると、そのクリックイベントを切り替える必要があるとして、この記事では、ポイントの横に避けるために、この記事の焦点では​​ない、それらを表示されません。

  • スタジオ次の役割があります。

    1. 普通のユーザー
    2. 上座部のユーザー
    3. 住宅管理
    4. 教師(アンカー)
    5. ギャグユーザー
    6. 観光客
1641428-684fb19a0e76a6d4.png
スタジオスタイル.PNG
  • 私たちは、そのような他のPKなど他の役割を追加、教師や他の分野に役立つ未来を排除しない、非常に多くのライブの間で役割を見ることができます。これは、複数の、コールバックが呼び出されたインタフェースから、いくつかの切り替えを切り替えて役割の切り替えに関する、いくつかのIMトリガスイッチなどが...それは成分が3以上に切り替えられるよりも大きい、それぞれが同じで記述する必要がありますコード、また、各変更にする必要がある場合、あなたは切り替えられる必要がある構成要素を知ることなく、分散モードスイッチ、外部の発信者を統一するスキンを使用することができる切り替える必要があり、唯一のハンドオーバを開始するために必要なコンポーネントと一緒に従いますアクションの動作が可能。

外観モードを達成するためにどのように?

  • ファサード、ファサード・インタフェース、APIが提供する外部インタフェース。
  • サブシステム・インターフェースは、各サブシステムが実装する必要があります。

外観練習モード、統一された治療スタジオの役割の変更

通常のロジックは、私たちのコードを記述する場合、私はステート・モードで再びすべてのUIコンポーネントパッケージを持っている場合は、それ以外の、外部だけで役割を切り替えるためにAPIを呼び出す必要で、たくさんあるでしょう、どのように内部スイッチは心配する必要はありません、追加、表示、非表示または削除することです。変更は、その後さまざまなコンポーネントのメソッド呼び出しを切り替え、唯一の機会ではない役割は、私たちが見えモデル、統一されたコールアピアランス、外観を使用して、役割を切り替えるために必要なコンポーネントのそれぞれに配布このケースを解決するために、どこにでもなります。

実装手順

  1. IRoleSwitcherインタフェースは、役割は同じであるによる我々のファサードと他の構成要素の動作に各スイッチング方法の役割を定義するインターフェイスを切り替えるので、界面に合併。

  2. コンポーネント・インターフェース・サブシステム・インターフェース、各サブシステムはそれを継承するためのインタフェースを有し、特定のAPIサブシステムを提供し、一般的な組み立て方法を定義します。

  3. IBottomBarComponent、下部バーコンポーネントインターフェースは、コンポーネントのインターフェースとIRoleSwitcherインタフェースを実装します。

  4. IApplyForSeatComponent、上座ボタンコンポーネントインタフェース、およびIRoleSwitcherインタフェースコンポーネントインタフェースを実装します。

  5. IToolBoxComponent、サイドバーコンポーネントインターフェースは、コンポーネントのインターフェースとIRoleSwitcherインタフェースを実装します。

  6. IRoleComponent、我々は、API APIは同じであるファサードので、我々は、上記の3つのコンポーネントおよびサブシステムへのディストリビューションスイッチのイベントを担当するファサードを、見てのコンポーネントの役割は、それ自体がIRoleSwitcherのユーザーインターフェイスを実装します。コンポーネントは、コンポーネントの使用として実現します。(他の人が一般的なシーンのファサードAPIで異なるサブシステムを必要とし、サブシステムが同じではありませんしながら、非必須、しかし、私たちのシナリオは、基本的にイベントを切り替える配布され、比較的簡単です)

〜ナンセンス、コードを実行します。

  • コンポーネントコンポーネント・インタフェースとIRoleSwitcherインターフェイス。
public interface Component {
}

public interface IRoleSwitcher {
    /**
     * 设置为普通用户角色
     */
    void setNormalUserRole();

    /**
     * 设置为管理员角色
     */
    void setManagerRole();

    /**
     * 设置为上座用户角色
     */
    void setSeatUpRole();

    /**
     * 设置为老师角色
     */
    void setTeacherRole();

    /**
     * 设置为游客角色
     */
    void setVisitorRole();

    /**
     * 设置为游客禁言角色
     */
    void setForbidSpeakRole();
}
  • IBottomBarComponent、下のバーアセンブリインタフェースと実装クラス
public interface IBottomBarComponent extends Component, IRoleSwitcher {
    //...其他Api方法,不是重点
}

public class BottomBarComponent extends BaseRoomComponent implements IBottomBarComponent {
    @Override
    public void setNormalUserRole() {
        //底部栏切换到普通用户角色样式
        ...
    }

    @Override
    public void setManagerRole() {
        //底部栏切换到普通用户角色样式
        ...
    }

    @Override
    public void setSeatUpRole() {
        //底部栏切换到上座用户角色样式
        ...
    }

    @Override
    public void setTeacherRole() {
        //底部栏切换到老师用户角色样式
        ...
    }

    @Override
    public void setVisitorRole() {
        //底部栏切换到游客角色样式
        ...
    }

    @Override
    public void setForbidSpeakRole() {
        //底部栏切换到禁言用户角色样式
        ...
    }
}
  • IApplyForSeatComponent、上座ボタンアセンブリ
public interface IApplyForSeatComponent extends Component, IRoleSwitcher {
        //...省略其他Api
}

public class ApplyForSeatComponent extends BaseRoomComponent implements IApplyForSeatComponent {
        //...实现方法和BottomBarComponent是一致的,所以不再列举
}
  • IToolBoxComponent、サイドバーコンポーネント
public interface IToolBoxComponent extends Component, IRoleSwitcher {
        //...省略其他Api
}

public class ToolBoxComponent extends BaseRoomComponent implements IToolBoxComponent {
        //...实现方法和BottomBarComponent是一致的,所以不再列举
}
  • IRoleComponent、コンポーネントの役割、中間クラス
public class RoleComponent extends BaseRoomComponent implements IRoleComponent {
@Override
    public void setNormalUserRole() {
        getComponentProvider().getBottomBarComponent().setNormalUserRole();
        getComponentProvider().getApplyForSeatComponent().setNormalUserRole();
        getComponentProvider().getToolBoxComponent().setNormalUserRole();
    }

    @Override
    public void setManagerRole() {
        getComponentProvider().getBottomBarComponent().setManagerRole();
        getComponentProvider().getApplyForSeatComponent().setManagerRole();
        getComponentProvider().getToolBoxComponent().setManagerRole();
    }

    @Override
    public void setSeatUpRole() {
        getComponentProvider().getBottomBarComponent().setSeatUpRole();
        getComponentProvider().getApplyForSeatComponent().setSeatUpRole();
        getComponentProvider().getToolBoxComponent().setSeatUpRole();
    }

    @Override
    public void setTeacherRole() {
        getComponentProvider().getBottomBarComponent().setTeacherRole();
        getComponentProvider().getApplyForSeatComponent().setTeacherRole();
        getComponentProvider().getToolBoxComponent().setTeacherRole();
    }

    @Override
    public void setVisitorRole() {
        getComponentProvider().getBottomBarComponent().setVisitorRole();
        getComponentProvider().getApplyForSeatComponent().setVisitorRole();
        getComponentProvider().getToolBoxComponent().setVisitorRole();
    }

    @Override
    public void setForbidSpeakRole() {
        getComponentProvider().getBottomBarComponent().setForbidSpeakRole();
        getComponentProvider().getApplyForSeatComponent().setForbidSpeakRole();
        getComponentProvider().getToolBoxComponent().setForbidSpeakRole();
    }
}
  • コールで呼び出しを切り替えます
mDataStore = getDataStore();
    
//监听房间信息改变切换角色。
mDataStore.getLiveRoomViewModel().getRoomInformationLiveData().observe(getLifecycleOwner(), new Observer<RoomInformationModel>() {
@Override
public void onChanged(@Nullable RoomInformationModel roomInformationModel) {
    if (roomInformationModel == null) {
        return;
    }
    IMRoomInfoModel roomInfoModel = roomInformationModel.getRoomInfo();
    IMSendUserModel currentUser = mDataStore.getLiveRoomViewModel().getCurrentUserLiveData().getValue();
    if (currentUser == null) {
        return;
    }
    //这里简单期间,省略了决定角色的生成,决定后通知其他组件切换样式
    IRoleComponent roleComponent = getComponentProvider().getRoleComponent();
    //老师角色
    if (currentUser.isTeacher()) {
        roleComponent.setTeacherRole();
    } else if (currentUser.isNormalUser()) {
        //普通用户角色
        roleComponent.setNormalUserRole();
    } else if (currentUser.isSeatUpUser()) {
        //上座用户角色
        roleComponent.setSeatUpRole();
    } else if (currentUser.VisitorRole()) {
        //游客角色
        roleComponent.setVisitorRole();
    } else if (currentUser.isForbidSpeakUser()) {
        //禁言用户角色
        roleComponent.setForbidSpeakRole();
    }
}
});

概要

  • アピアランスモデルの利点:内部サブシステムの詳細を隠し、外部エントリの統一された方法を提供します。

  • 欠点の見えモデル際に、当社のビジネスの変化、クラスの外観は、開閉の原則に従っていませんでした、あなたは新しいロジックとサブクラスの追加、クラスの外観を変更する必要があるかもしれません。

ます。https://www.jianshu.com/p/75d9b9b2cd6cで再現

おすすめ

転載: blog.csdn.net/weixin_33910137/article/details/91135594
おすすめ