设计模式
简单工厂模式
每个实例通过继承一个规范接口,来规范实例
比如 我一个 车子 的接口 创建两个不同的实例,自行车·电动车,然后都继承车子接口
车子接口有固定功能也就是接口,前进,停止,自行车实例和电动车实例都实现车的功能
内部实现方法自己定。
Car car = new BaosjCar();
Car car1 = new BiYdCar();
car.start();
car.close();
car1.start();
car1.close();
工厂模式
静态工厂模式,类似简单工厂模式,再添加一个类管控这些实例,让调用者不用创建实例
只需要调用管控这些实例的这个类即可。
符合迪米特法则 A B C 三者互相只访问相邻的
Car car = Factory.getCar("1");
Car car1 = Factory.getCar("7");
car1.start();
car.start();
工厂模式,通过 “车” 接口 横向规定每个车的功能 ,然后再创建车工厂接口用来规范车的类型,
每次新增不同的车类型 只需要实现这个 “车工厂”接口中的静态方法然后通过方法返回对应的实例
这样以后在创建车的品牌就不用修改代码了,只需要新增“车”的类和“品牌车工厂”类,再在品牌车工厂类里继
承“车工厂”接口 实现get实例的静态方法就能添加一个品牌了,符合开闭原则
车接口
package com.cof23.Factory;
public interface Car {
void start();
}
车工厂接口
package com.cof23.Factory;
public interface CarFactory {
Car getCar();
}
新增的车品牌
package com.cof23.Factory;
public class DianDongCar implements Car{
@Override
public void start() {
System.out.println("电动车启动");
}
}
新镇的品牌车工厂
package com.cof23.Factory;
public class DianDongCarFactory implements CarFactory{
@Override
public Car getCar() {
return new DianDongCar();
}
}
实际调用
package com.cof23.Factory;
/**
* 简单工厂模式
*/
public class test {
public static void main(String[] args) {
// Car car = Factory.getCar("1");
// Car car1 = Factory.getCar("7");
// car1.start();
// car.start();
new JiaoCheFactory().getCar().start();
new KaCheFactory().getCar().start();
new DianDongCarFactory().getCar().start();
}
}
输出
此模式符合开闭原则但是修改起来比较麻烦需要添加的代码太对,太臃肿
结构复杂度和代码复杂度和编程复杂度和管理上的复杂度都是简单工厂方式更加方便,
设计原则 需要工厂模式
实际业务 简单工厂模式
抽象工厂模式
抽象工厂
假设一个场景, 我现在有电脑和手机两个产品,并且有两个品牌,小米和华为,那我的代码根据这两个去设计,并且要符合后续新增品牌的时候我不用修改代码,只是新增就行了,
抽象工厂的实现思路是,产品的类型通过一个接口管控,然后不同品牌你的产品创建不同的类,
继承对应产品的接口,实现产品接口的方法,这个是对应业务逻辑代码的地方,不同的品牌不同的代码嘛
之后要获取手机和电脑,为了符合开闭原则,这里应该创建一个获取手机和电脑的接口,然后创建不同品
牌的工厂类实现这个获取手机和电脑的接口,后面方便获取不同品牌的手机和电脑实例
后续新增品牌只需要新增类实现手机或者电脑的接口,然后创建新品牌的工厂类,继承获取手机和电脑的接口,就可以调用了