设计模式之六原则

单一职责:
    例子:
        IPhone接口中有三个方法
            dial --拨号
            chat --通话
            hangup --挂断电话
            
        由于拨号 和 挂断电话是属于协议,而通话属于业务,所以对接口进行拆分
        
        IConnector接口
            dial --拨号
            hangup --挂断电话
        IDataTransfer接口
            chat --通话
    
    总结:对接口,有且仅有一个原因引起接口的变化。上面的例子协议 和 数据传输的变化都会引起IPhone接口的变化,所以要拆分
        对类,尽力做到有且仅有一个原因引起类的变化,这个通常很难。
        对方法,有且仅有一个原因引起方法的变化。

里氏替换原则
    所有引用基类的地方必须能透明的使用其子类的对象;反之不行,子类出现的地方,父类未必能适应。
    例子:士兵打枪,枪是父类,子类有多个实现。
    4原则
        a 子类必须完全实现父类的方法
        b 子类可以有自己的个性
        c 覆盖或实现父类的方法时,输入参数可以被放大
            class Father {
                public Collection doSomething(HashMap map){
                    System.out.println("父类被执行...");
                    return map.values();
                }
                
                public static void main(String[] args){
                    invoker();
                }
                
                public static void invoker(){
                    Son f = new Son();
                    HashMap map = new HashMap();
                    f.doSomething(map);
                }
            }
            
            class Son extends Father{
                public Collection doSomething(Map map){
                    System.out.println("子类被执行...");
                    return map.values();
                }
            }
        d 覆盖或实现父类的方法时,输出结果可以被缩小。
        
依赖倒置原则
    模块之间的依赖通过抽象发生,实现类之间不直接发生依赖,依赖通过接口或抽象类产生
    接口或抽象类不依赖于实现类,实现类依赖于接口或抽象类
    这就是所谓的面向接口编程
    例子:司机开汽车,汽车是个接口,有多个实现类,司机调用接口即可。
        依赖倒置三个写法:构造函数,set/get,接口中写

接口隔离原则
    客户端不应该依赖它不需要的接口。从模块角度考虑,一个模块应该依赖他所需功能的接口,不需要的就不要写。
    例子:女孩接口:脸蛋、身材、气质。  但是气质每个时代不同,所以需要隔离
        女孩接口1:脸蛋、身材
        女孩接口2:气质
        然后用女孩实现接口1 和 接口2
    
迪米特法则
    对调用的类知道的越少越好。最好只知道public方法,耦合性最低最好。
    4个原则
        a 一个类只和朋友交流,朋友指属性、方法的输入输出参数。
            例子:老师 命令 体委 清点 学生。
                老师只和体委交流,体委清点学生,学生的数量放在场景类中,而不是老师中。
        b 一个类和朋友是有举例的不能太近,也不能太远。
            例子:软件安装步骤
                不能将所有的步骤暴露出来,将步骤封装在一个方法中,将这个方法暴露出来
        c 是自己的就是自己的。一个类放在本类中可以,放在其他类中也可以,那么就放在本类中。
        d 谨慎使用Serializable,在用RMI时,服务端和客户端修改要同步。
        
开闭原则
    一个软件实体,如模块、类、抽象、方法,对扩展开放,对修改关闭.
    例子:书店的例子
        所有的书打9折,继承原来的类,重写价格方法,这样就是扩展而不是修改。
    
solid
s:单一职责----single responsibility principle
o:开闭原则----open closed principle
l:里氏替换----liskov substitution principle
l:迪米特 ----law of demeter
i:接口隔离----interface segregation principle
d:依赖倒置----dependence inverse principle
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值