封装是什么?

有些人看到封装两个字一脸茫然,这似乎是个很深奥的词,现在我告诉你封装其实只是把一些重要或重复的代码拿出来规范了一下而已。“重要”对刚入手的人来说可能并不清楚,但“重复”应该深有体会吧。后续就从“重复”开始慢慢理解封装。

我该如何封装?

首先,一个成功的封装应该具备以下所有的条件:

1.可拓展性强:如果你写的代码只适合某些特定、苛刻的条件下才能使用,那么这顶多算是一个工具类。反例:“封装”了一个BaseAdapter,但只能用在你的首页。

2.低耦合高内聚①:在java里都必须遵循低耦合高内聚。反例:“封装”了一个WebActivity,主要是加载app的关于我们、检查更新等h5的,但每次增加h5都要加上如下ifelse,如下。仔细想想,只要上一个界面传入url和title就行了,根本不需要什么ifelse

int type = getIntent().getIntExtra("type", 1);
        if (type==1){
            mWebView.loadUrl("http://...");
            mTitle.setText("关于我们");
        }else if (type==2){
            mWebView.loadUrl("http://...");
            mTitle.setText("检查更新");
        }else if ...

3.简化了原有逻辑:代码可能会多(也不能太复杂吧),但逻辑思路要比原有清晰简单。反例:“封装”了一个BaseAdapter,但用户必须要额外调用很多set方法才能使用。

4.注释详细:如果没有注释只有你会玩那人生还有什么乐趣呢?反例:“封装”了一个超牛逼BaseAdapter,可以任意动画、任意填充数据,但没有任何注释,请问除了你谁敢用?

5.源于需求:先有问题(可预知的问题也算)然后才能解决问题,封装也是这样。反例:“封装”了一个超牛逼BaseAdapter,可以上天,但是你的项目需要上天吗?

6.可预见性:就是要有远见。比如公司的所有列表都展示10条,你不能在基类里面写死count=10,这应该由子类或动态生成的

7.不变性:虽然封装是源于需求,但封装必须尽量不和业务需求打交道。不能因10条变成11条而大动干戈的改封装

 

①什么是低耦合高内聚:

低耦合:对象与对象、方法与方法、封装类与子类等之间交互尽量越简单越好。通俗的讲就是两个人之间不应该有太多牵扯,不然会理不清。如下Activity,其实只需要一个name,但却要了对方的整个类

public class BBActvity extends AppCompatActivity{
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        XXBean bean= (XXBean) getIntent().getSerializableExtra("bean");
        httpData(bean.name);
    }
}

高内聚:自己的代码应该尽量精炼。通俗的讲就是要让自己变得老练,不然别人会看不起...。如上最上面的WebActivity,低耦合是有了(只要了一个type),但自己却出现了一大堆冗余代码。

既然建议这么低耦合高内聚是不是我所有的对象或方法都应该这样写?

当然不是了,低耦合高内聚一般使用在不同功能之间、Activity之间、封装类与子类之间,像同一个类下的方法、Activity与adapter等自己看情况啦