(简单工厂模式、工厂方法模式)笔记
学自B站狂神
一、OOP七大原则
开闭原则:对扩展开放,对修改关闭里氏替换原则:继承必须确保所有的性质在子类中仍然成立依赖倒置原则:要面向接口编程,不要面向实现编程单一职责原则:控制类的粒度大小,将对象解耦,提高其内聚性(类功能单一)接口隔离原则:要为各个类建立它们需要的专用接口(接口功能单一)迪米特法则:只与你的直接朋友交谈,不跟“陌生人”谈话合成复用原则:尽量使组合或者聚合等关系来实现,其次才考虑使用继承关系来实现。
二、工厂模式
作用:实现创建者和调用者的分离分类:简单工厂模式、工厂方法模式、抽象工厂模式
三、简单工厂模式笔记
1. car接口:
package com.wu.simple;
public interface Car {
public void name();
}
2. 接口实现类:
TeslaCar.class
package com.wu.simple;
import com.wu.simple.Car;
public class TeslaCar implements Car {
public void name() {
System.out.println("特斯拉");
}
}
WulingCar.class
package com.wu.simple;
import com.wu.simple.Car;
public class WulingCar implements Car {
public void name() {
System.out.println("五菱宏光");
}
}
3. 管理取得实例的工厂类 :FactoryCar
package com.wu.simple;
public class FactoryCar {
public static Car getCar(String car){
if(car.equals("五菱")){
return new WulingCar();
}
if(car.equals("特斯拉")){
return new TeslaCar();
}
if(car.equals("大众")){
return new DaZong();
}
else{
return null;
}
}
}
4. 测试类Consumer:
package com.wu.simple;
public class Consumer {
public static void main(String[] args) {
//这是以前获得对象方式
WulingCar car1 = new WulingCar();
car1.name();
System.out.println("//");
//简单工厂模式
/*通过简单工厂模式,我们不用关心具体的 new WulingCar()长什么样,不用关心构造方法里面的参数
* 我们取这个对象直接通过工厂里面去取出来
*/
Car car2 = FactoryCar.getCar("五菱");
car2.name();
Car car3 = FactoryCar.getCar("特斯拉");
car3.name();
//扩展一个功能: 大众
Car car4 = FactoryCar.getCar("大众");
car4.name();
/*假如我要扩展一个Car,比如大众,需要去修改FactoryCar里面的代码
* 违反了扩展对外开放,修改关闭原则
* 为了解决这个问题引入了 工厂方法模式
* 但工厂方法模式:存在多一个功能就多一个对应功能的工厂
*/
}
}
四、工厂方法模式
1. car接口:
package com.wu.factorymthod;
public interface Car {
public void name();
}
2.CarFactory接口:
package com.wu.factorymthod;
public interface CarFactory {
Car getCar();
}
3.实现类:
TeslaCar.class
package com.wu.factorymthod;
public class TeslaCar implements Car {
public void name() {
System.out.println("特斯拉");
}
}
TeslaFactory.class
package com.wu.factorymthod;
public class TeslaFactory implements CarFactory {
public Car getCar() {
return new TeslaCar();
}
}
WulingCar.class
package com.wu.factorymthod;
public class WulingFactory implements CarFactory {
public Car getCar() {
return new WulingCar();
}
}
4.测试类 Consumer:
Consumer.class
package com.wu.factorymthod;
public class Consumer {
public static void main(String[] args) {
//通过工厂拿到对应的Car
new WulingFactory().getCar().name();
//
new TeslaFactory().getCar().name();
}
}
五、总结
结构复杂度:简单工厂模式代码复杂度:简单工厂模式编程复杂度:简单工厂模式管理复杂度:简单工厂模式
根据设计原则:工厂方法模式
根据实际业务:简单工厂模式