用到了OOP七大原则:
1.开闭原则:一个软件的实体应当对外扩展开放,对修改关闭
2.依赖倒转原则:要针对接口编程,不要针对实现编程
3.迪米特法则:只与你直接的朋友通信,而避免和陌生人通信
核心本质:实例化对象不使用new ,用工厂方法代替,将选择实现类,创建对象统一管理和控制。从而将调用者跟我们的实现类解耦
抽象工厂(AbstractFactory)模式的定义:是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。
使用抽象工厂模式一般要满足以下条件。
- 可以在类的内部对产品族中相关联的多等级产品共同管理,而不必专门引入多个新的类来进行管理。
- 当需要产品族时,抽象工厂可以保证客户端始终只使用同一个产品的产品组。
- 抽象工厂增强了程序的可扩展性,当增加一个新的产品族时,不需要修改原代码,满足开闭原则。
其缺点是:当产品族中需要增加一个新的产品时,所有的工厂类都需要进行修改。增加了系统的抽象性和理解难度。
因此,我们直接上代码!
简单工厂模式
代码实现:
Car接口:
package factory1;
public interface Car {
void getName();
}
Factory类:
package factory1;
public class Factory {
public static Wuling getCar(){
return new Wuling();
}
}
Wuling类:
package factory1;
public class Wuling implements Car{
@Override
public void getName() {
System.out.println("五菱");
}
}
Test测试:
package factory1;
public class Test {
public static void main(String[] args) {
Factory factory = new Factory();
Wuling car = factory.getCar();
car.getName();
}
}
工厂方法模式
Car接口:
package factory2;
public interface Car {
void getName();
}
CarFactory接口:
package factory2;
public interface CarFactory {
Car getCar();
}
wuling:
package factory2;
public class Wuling implements Car{
@Override
public void getName() {
System.out.println("五菱");
}
}
WulingFactory:
package factory2;
public class wulingFactory implements CarFactory{
@Override
public Car getCar() {
return new Wuling();
}
}
Test类:
package factory2;
public class Test {
public static void main(String[] args) {
wulingFactory wulingFactory = new wulingFactory();
Car car = wulingFactory.getCar();
car.getName();
}
}
抽象工厂模式
phone接口:
package factory3;
public interface factory {
phone getPhone();
route getRoute();
}
route接口:
package factory3;
public interface route {
void openWife();
}
factory接口:
package factory3;
public interface factory {
phone getPhone();
route getRoute();
}
xiaomiphone类:
package factory3;
public class xiaomiPhone implements phone{
@Override
public void call() {
System.out.println("小米打电话");
}
}
xiaomiroute类:
package factory3;
public class xiaomiRoute implements route{
@Override
public void openWife() {
System.out.println("打开小米wife");
}
}
xiaomiFactory类:
package factory3;
public class xioamifacoty implements factory{
@Override
public phone getPhone() {
return new xiaomiPhone();
}
@Override
public route getRoute() {
return new xiaomiRoute();
}
}
Test测试:
package factory3;
public class Test {
public static void main(String[] args) {
xioamifacoty xioamifacoty = new xioamifacoty();
xioamifacoty.getPhone().call();
xioamifacoty.getRoute().openWife();
}
}