面向对象设计原则
1.配置文件可以不修改源代码就更换驱动程序---开闭原则----------功能需求变化了,需求扩展,不改代码
2.A是B父类。C定义了A的对象obj为C的成员变量,C里还有一个setA的方法给obj变量赋值----里氏替换原则----通过父类的对象调用子类方法,可以替换父类
3.子类有新方法父类没有,父类变量去调用子类方法时,如果调用子类扩展的方法会报错---里氏替换原则---透明替换就是不报错
4.针对接口而非实现编程--针对抽象而非具体类编程---开闭原则
5.优先使用聚合组合而非继承,更加灵活容易扩展--合成复用原则
6. 高层不应该依赖于低层(抽象层,实现层),低层/实现应该依赖高层/抽象
7.开闭原则是可复用的基础--extension,modification
8.里氏替换原则---base class object , subclass object
9.依赖倒转原则---abstraction, implementation
10.继承复用和组合复用----继承复用,子类可以继承父类方法属性,而且可以选择性继承;-----继承复用会打破系统封装性因为父类都曝光在子类面前----合成复用,聚合,组合关系是将一个类的对象作为另一个类的成员变量(可以调用其方法)/成为新对象的一部分------合成复用是黑箱复用,因为没有暴露内部内容
11.应该着重针对抽象编程-----依赖倒转原则---因此说依赖关系集中于抽象类就是符合原则的
12.DB为链接数据库类,DAO为操作数据库内容类。二者关系应该是关联还是继承?---关联Association----合成复用原则
13.每个客户端需要一个更小的接口,只需要与之相关的方法---接口隔离原则---但并不是说只定义一个方法,而是需要的那些方法--应该说实现一个功能/代表一个角色
14.Demeter法则-----降低类之间的耦合度----不需要把类,函数设置为公有函数,毫无道理
15.Demeter法则的运用:客户端通过第三方间接访问远程对象(代理模式)
创建设计模式
1.面向对象的模式优势:可以复用成功的设计
2.简单工厂模式-----根据参数不同返回不同类的实例/子类对象----静态工厂方法(可以从static识别)---在简单工厂模式中,工厂类负责创建具体产品的实例。这些具体产品类通常都实现了一个共同的接口或者继承自一个抽象类。在这种情况下,抽象类或者接口定义了产品族的公共接口或行为。
选项 D 中提到了 Cipher 类中的 encrypt() 方法必须是一个抽象方法,这是错误的。在简单工厂模式中,并不要求抽象产品类的所有方法都是抽象的。具体产品类可以有自己的实现逻辑,而不必全部依赖于抽象方法。因此,encrypt() 方法可以是一个具体的方法,用于实现加密逻辑,而不必要求它是一个抽象方法
3.工厂方法---------不如抽象工厂一般化和抽象化(越一般化越抽象化)
4.抽象工厂--多于一个产品族被使用---等级结构更加简便,因为创建的模块比工厂方法少----增加产品族符合开闭原则,但增加等级结构不符合开闭原则,所以它不始终符合原则
5.一系列产品就是一个产品族---一个产品等级结构是一组有继承关系的产品
6.一般不指明,默认工厂模式为工厂方法---方法不能改静态,静态方法不能修改子类---当工厂方法是实例方法时,它可以被子类重写,从而允许每个具体的子类提供自己的工厂逻辑,以创建特定类型的产品。这种灵活性使得工厂方法模式更容易扩展和维护,因为它遵循了开闭原则,即对扩展开放,对修改关闭。如果工厂方法是静态的,就无法实现这种灵活性,因为静态方法不能被子类重写
7.建造者模式将构建与设计剥离---客户端不需知道创建细节----具体建造者之间没有依赖关系
8.原型模式---原型模式通过创建一个原型对象,然后通过复制这个原型对象来创建更多相同类型的对象,从而指定要创建的对象类型----每个类都需要配置一个克隆方法----浅拷贝只复制考虑的对象,而不是它引用的对象,这意味着其中的成员对象不会被复制。----深复制也可以,但是需要写复杂代码----如果一个类要支持克隆,它必须实现Cloneable接口-----在子类的clone()方法中,通常会调用super.clone()来获得父类的浅拷贝,然后再根据需要修改或者添加新的属性----通常,x.clone() != x,x.clone().getClass() == x.getClass()
9.单例模式适用---确保一个类只能创建唯一实例对象----可以被继承---必须本身创建,必须开发给整个系统-----
标签:----,原则,子类,复用,---,习题,设计模式,方法 From: https://www.cnblogs.com/xiyiji/p/18153092