大话设计模式-外观模式-2020-10-14

2020-10-14  本文已影响0人  勇往直前888

定义

为子系统中一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

结构图

image.png

使用场景

1.在设计初期,应该要有意识将两个系统分离开,例如三层系统,逻辑层与页面层之间建立外观,这样为复杂的系统提供简单接口,使得耦合大大降低。

2.在开发阶段,子系统由于不断重构演化而变得复杂,用外观模式可以提供简单的接口,减少两者依赖。

3.在维护阶段,这个系统已经难以维护,但是新系统又依赖他,外观可以提供旧系统的接口,新系统只跟外观打交道。

买卖基金的例子

image.png

这里的基金就是外观模式中的外观Facade

class Stock1 {
    public String Buy() {
        String message = "股票1买入\n";
        Log.v("Stock1", message);
        return message;
    }

    public String Sell() {
        String message = "股票1卖出\n";
        Log.v("Stock1", message);
        return message;
    }
}

class Stock2 {
    public String Buy() {
        String message = "股票2买入\n";
        Log.v("Stock2", message);
        return message;
    }

    public String Sell() {
        String message = "股票2卖出\n";
        Log.v("Stock2", message);
        return message;
    }
}

class Stock3 {
    public String Buy() {
        String message = "股票3买入\n";
        Log.v("Stock3", message);
        return message;
    }

    public String Sell() {
        String message = "股票3卖出\n";
        Log.v("Stock3", message);
        return message;
    }
}

class NationalDebt1 {
    public String Buy() {
        String message = "国债1买入\n";
        Log.v("NationalDebt1", message);
        return message;
    }

    public String Sell() {
        String message = "国债1卖出\n";
        Log.v("NationalDebt1", message);
        return message;
    }
}

class Realty1 {
    public String Buy() {
        String message = "房产1买入\n";
        Log.v("Realty1", message);
        return message;
    }

    public String Sell() {
        String message = "房产1卖出\n";
        Log.v("Realty1", message);
        return message;
    }
}
class Fund {
    Stock1 gu1;
    Stock2 gu2;
    Stock3 gu3;
    NationalDebt1 nd1;
    Realty1 rt1;

    public Fund() {
        gu1 = new Stock1();
        gu2 = new Stock2();
        gu3 = new Stock3();
        nd1 = new NationalDebt1();
        rt1 = new Realty1();
    }

    public String Buy() {
        return gu1.Buy() + gu2.Buy() + gu3.Buy() + nd1.Buy() + rt1.Buy();
    }

    public  String Sell() {
        return gu1.Sell() + gu2.Sell() + gu3.Sell() + nd1.Sell() + rt1.Sell();
    }
}
image.png
public class FacadeActivity extends AppCompatActivity {

    public static void launch(Context context) {
        if (null != context) {
            Intent intent = new Intent();
            intent.setClass(context, FacadeActivity.class);
            if (!(context instanceof Activity)) {
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            }
            context.startActivity(intent);
        }
    }

    TextView infoTextView;
    Fund jijin;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_facade);
        setTitle("外观模式");

        infoTextView = findViewById(R.id.textViewInfo);
        jijin = new Fund();
    }

    public void onBuyClick(View view) {
        infoTextView.setText(jijin.Buy());
    }

    public void onSellClick(View view) {
        infoTextView.setText(jijin.Sell());
    }
}

Demo地址

https://gitee.com/zhangxusong888/Android/tree/master/design_pattern

上一篇下一篇

猜你喜欢

热点阅读