简述面向对象的六大原则

来源:互联网 发布:迪杰斯特拉算法 动画 编辑:程序博客网 时间:2024/06/02 14:40

单一职责原则

一个类中应该是一组相关性很高的函数、数据的封装;

开闭原则

  • 定义:对于扩展是开放的,对于修改是封闭的;
  • 理解:意思就是可以任意的往外边扩展,但是不能对写好的修改,怎么达到这个要求呢?写接口。执行的方法写成接口,这样如果我们要扩展不同的实现,那就可以扩展新的实现了原来接口的类,然后丢进去就可以啦;
  • 实例:

    //执行体class A {    // H:相当于任务的执行者    private void doA( H h){        h.doMyTask();//此处调用接口的方法,达到 闭 的效果,只管我要干啥,具体怎么干可以不管    }}---------------------------// 接口interface H{    void doMyTask();}---------------------------//任务执行者实现体class B implements H{    void doMyTask(){        sys.out("干B的活");    }}class C implements H{     void doMyTask(){         sys.out("干C的活");     }}//操作者class K {    A a =new A();    a.doA(new B);    a.doA(new C);    a.doA(new H(){        doMyTask(){             sys.out("干随时扩展自定义的活");        }    });}

    +实例分析:
    由上述我们可以分析得出,如果我是老K,我现在要让A干一件活,现在我知道要他干什么活,可以写死在A的doA()方法里边,但是如果有一天这个活有了不同的要求,那么我同样还是找A来干活,但是干什么活,通过接口的不同实现来定义;

里氏替换原则 LSP

  • 定义:所有应用其基类的地方,必须都能透明的使用其子类的对象;
  • 核心原理:抽象、继承、多态
  • 理解:当我要一个人干一种活的时候,发现有一类人都要干这种活,比如吃饭。那么,我就可以把这一类人抽象出来,同样干“吃饭”这种活,不过很明显,每个人都会有每个人的吃放。所以吃饭这个活也是抽象的,继承的实现体具体去干自己的活。当然,加入我是食堂的,我喊一声可以吃放了。然后不同的人(实现体)就跑进食堂,纷纷吃自己的饭啦!
  • 实例:

    //食堂
    class ShiTang{
    void ganHuo(Person p){
    p.chiFan();
    }
    }
    //抽象
    abstarct class Person{
    public abstarct foid chiFan();
    public void shuiJiao(){
    //do ….
    }
    }
    //小明
    class xiaoMing extends Person{
    public void chiFan(){
    sys.out(“小明吃饭”);
    }
    }
    //小兵
    class xiaoBing extends Person{
    public void chiFan(){
    sys.out(“小兵吃饭”);
    }
    }

  • 分析:由Person类可以知道,我们把一类人抽象到父类,若果某一件活,不同子类有不同的干法,就发方法抽象出来,子类继承再具体实现它。真正要这一类人干活的时候,直接调父类。这样,如果传入的是子类,也同样适用,并且还能实现各干各的活;

依赖倒置原则 DIP

  • 定义:模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或者抽象类产生的;
  • 理解:假如我现在需要租个房子,然后我把身边的朋友叫过来,说给我帮忙找个房子。然后朋友们就去找了。还有一种方案,我可以打个电话给中介,让中介给我找。这样的优势就是,我和真正去找房子的人没有直接的联系。如果朋友临时有事,可能就不能帮忙给我找了。但是,中介就不会发生这种情况;所以,当我们要做一件事的时候,并不需要把做事的人拉进来,而只需要下订单,把事情外包给专门做这种事情的人去做,具体是谁就不要管那么多;这样,可以随时更换外包公司,而不影响自身业务;
  • 实例:

    //我class Me{   Zu zu ;    // 我找个中介    void setZu(Zu zu){        this.zu=zu;    }    void zuFangZi(){        zu.zuFang();//我找中介给我租房子    }}//租房这件事interface Zu{    void zuFang();}//中介 专干租房的事class ZhongJie implements Zu{    void zuFang(){      sys.out("中介租房");    }}
  • 分析:有上述示例可以发现,我 和 中介 没有了直接的关联,但是照样把事情干了。如果这个中介倒闭了,我只要去换一家同样嫩帮我租房子的中介set进来就可以啦!

1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 慕课的账号忘了怎么办 清华同方无线鼠标没反应怎么办 全日制专硕考上公务员了怎么办 超出了期刊编辑部审稿时间怎么办 教师晋职称毕业证丢了怎么办 下属部门一直不交材料怎么办 简书投稿被拒绝怎么办 论文引用文献为0怎么办 小米屏幕录制卸载了怎么办 用edius剪的视频卡顿怎么办 微店手机号换号登不进去了怎么办 微信加人被限制怎么办 微信与电脑同步怎么办 微信号盗了红包怎么办 微信被别人登录冻结了怎么办? 微信账号被冻结了怎么办 我微信冻结了怎么办 微信账号冻结了怎么办 微信被冻结里面的钱怎么办 微信账户冻结了怎么办 微信公众号忘记密码怎么办 网课没有刷完怎么办 形势与政策挂了怎么办 苹果录屏声音小怎么办 老师跟学生家长吵起来了怎么办 蓝幕拍摄抠像有蓝色怎么办 学东西悟性不高怎么办 微商不会写笔记怎么办 布鞋买大了一码怎么办 凉鞋买大了一码怎么办 皮鞋小了一码怎么办妙招 图书馆借的书本损坏了怎么办 把人打伤没钱赔怎么办 小孩不小心打伤了老师怎么办 高考进了三段怎么办 工作中和领导产生冲突怎么办 酒店不给员工发工资怎么办 裙子没有解开超市的锁怎么办 接待老外听不懂他说的怎么办 脚脱皮又痒又臭怎么办 成都应聘平面模特被骗了怎么办