作用
- 实现了创建者和调用者的分离
- 详细分类
简单工厂模式
工厂方法模式
抽象工厂模式
符合OOP七大原则
- 开闭原则
- 依赖倒转原则
- 迪米特法则
核心本质
- 实例化对象不使用new,用工厂方法代替
- 将选择实现类,创建对象统一管理和控制,从而将调用者和我们的实现类解耦。
工厂模式参考
(笔记最优)
备注
- 抽象工厂模式:创建工厂的抽象工厂
抽象工厂示例
##先定义两个产品
public interface IPhoneProduct {
void start();
void shutdown();
}
public interface IRouterProduct {
void sendSms();
}
##在具体实现两个产品接口
public class XiaomiPhoneProduct implements IPhoneProduct{
@Override
public void start() {
System.out.println("小米手机开机");
}
@Override
public void shutdown() {
System.out.println("小米手机关机");
}
}
public class XiaomiRouterProduct implements IRouterProduct{
@Override
public void sendSms() {
System.out.println("小米路由器发短信");
}
}
public class HuaweiPhoneProduct implements IPhoneProduct{
@Override
public void start() {
System.out.println("华为手机开机");
}
@Override
public void shutdown() {
System.out.println("华为手机关机");
}
}
public class HuaweiRouterProduct implements IRouterProduct{
@Override
public void sendSms() {
System.out.println("华为路由器发短信");
}
}
##定义一个超级工厂
public interface IProductFactory {
IPhoneProduct getPhone();
IRouterProduct getRouter();
}
##创建具体的工厂
public class XiaomiFactory implements IProductFactory {
@Override
public IPhoneProduct getPhone() {
return new XiaomiPhoneProduct();
}
@Override
public IRouterProduct getRouter() {
return new XiaomiRouterProduct();
}
}
public class HuaweiFactory implements IProductFactory {
@Override
public IPhoneProduct getPhone() {
return new HuaweiPhoneProduct();
}
@Override
public IRouterProduct getRouter() {
return new HuaweiRouterProduct();
}
}