OOP七大原则
开闭原则:对扩展开放,对修改关闭
里氏替换原则: 继承必须确保超类所所拥有的的性质在子类仍然成立。
依赖倒置原则:要面向接口编程,不要面向实现编程
单一职责原则: 控制类的粒度大小,将对象解耦,提高其内聚性
接口隔离原则: 要为各个类建立他们所需要的专用接口
迪米特法则:只与你的直接朋友交谈,不跟陌生人讲话
合成复用原则:尽量先使用组合或则聚合等关联关系来实现,其次才考虑使用继承关系来实现
设计模式类型
创建型模式
工厂模式
创建对象时不会对客户端暴露创建逻辑,使用一个共同的接口来指向新创建的对象。
理解:类似一个黑盒子,创建时送入接口,不知道里面的情况,出来给你给你已经创建好的对象;
实现:
创建shape接口——》创建接口的实现类,圆类,三角形类,正方形类——》创建ShapeFactory工厂根据传入的值来创建对应的对象。
测试中创建对象
//获取 Rectangle 的对象,并调用它的 draw 方法
Shape shape2 = shapeFactory.getShape("RECTANGLE");
//调用 Rectangle 的 draw 方法
shape2.draw();
抽象工厂模式
通过一个超级工厂来创建其他工厂
在其中,接口负责创建一个相应对象的工厂
抽象工厂AbstractFactory——》工厂类 ShapeFactory 和 ColorFactory——》创建一个工厂创造器/生成器类 FactoryProducer。
实现:使用 FactoryProducer 来获取 AbstractFactory 对象。它将向 AbstractFactory 传递形状信息 Shape(CIRCLE / RECTANGLE / SQUARE),以便获取它所需对象的类型。同时它还向 AbstractFactory 传递颜色信息 Color(RED / GREEN / BLUE),以便获取它所需对象的类型。
举个例子:一个大工厂,可以生产小米工厂和华为工厂。通过小米/华为工厂可以制造旗下产品。抽象工厂生产产品族
建造者模式
将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
理解:
指挥者(包工头)——》指挥抽象的建造者(类似工人的工作清单)
具体的建造者(工人)——》生产产品(楼房)
对象创建 创建指挥对象——》director.build(new Work())_;
也可以没有指挥者
单例模式
我们将创建一个 SingleObject 类。SingleObject 类有它的私有构造函数和本身的一个静态实例。 SingleObject 类提供了一个静态方法,供外界获取它的静态实例。SingletonPatternDemo 类使用 SingleObject 类来获取 SingleObject 对象。
-
懒汉式,线程不安全
-
懒汉式,线程安全 必须加锁 synchronized 才能保证单例
-
饿汉式
private static Singleton instance = new Singleton(); //类开始直接创建
-
双检锁/双重校验锁
if (singleton == null) { synchronized (Singleton.class) { if (singleton == null) { singleton = new Singleton(); } } }
-
登记式/静态内部类
-
枚举
public enum Singleton { INSTANCE; public void whateverMethod() { } }
原型模式
就是拷贝对象
借鉴菜鸟教程
学习建议,通过代码来学习理解理论更快。