定义:有一个工厂对象决定创建那种产品类的实例
使用场景:
1,工厂类负责创建的对象比较少;
2,客户端(应用层)只知道传入工厂类的参数,对于如何创建对象(逻辑)并不关心
优:
只需要传入一个正确的参数,就可以获取你所需要的对象而不需要知道其创建的细节(对用户透明)
缺:
1,工厂类集中了所有实例(产品)的创建逻辑,一旦这个工厂不能正常工作,整个系统都会受到影响;
2,违背“开放 - 关闭原则”,一旦添加新产品就不得不修改工厂类的逻辑,这样就会造成工厂逻辑过于复杂。
3,简单工厂模式由于使用了静态工厂方法,静态方法不能被继承和重写,会造成工厂角色无法形成基于继承的等级结构。
角色:
1,Factory:根据参数创建不同的产品(提供方法创建产品实例)
2,AbstractProduct:抽象产品,具体产品都需要遵循的规范
3,ConcreteProduct:具体产品
例子
package com.llb.factory.simpleFactory;
import com.llb.factory.simpleFactory.impl.HuaWei;
import com.llb.factory.simpleFactory.impl.Iphone;
import com.llb.factory.simpleFactory.impl.OPPO;
import com.llb.factory.simpleFactory.impl.XiaoMi;
/**
* 普通工厂
*/
public class PhoneFactory {
public static Phone createPhone(String type){
switch (type){
case "XM":
return new XiaoMi();
case "HW":
return new HuaWei();
case "Iphone":
return new Iphone();
case "OPPO":
return new OPPO();
default:
System.out.println("无效输入");
return null;
}
}
}
package com.llb.factory.simpleFactory;
/**
* 抽象手机产品
*/
public interface Phone {
void function();
}
package com.llb.factory.simpleFactory.impl;
import com.llb.factory.simpleFactory.Phone;
/**
* 具体的手机厂商的手机
*/
public class XiaoMi implements Phone {
@Override
public void function() {
System.out.println("=== XiaoMi ===");
}
}
package com.llb.factory.simpleFactory.impl;
import com.llb.factory.simpleFactory.Phone;
/**
* 具体的手机厂商的手机
*/
public class OPPO implements Phone {
@Override
public void function() {
System.out.println("=== OPPO ===");
}
}
package com.llb.factory.simpleFactory.impl;
import com.llb.factory.simpleFactory.Phone;
/**
* 具体的手机厂商的手机
*/
public class Iphone implements Phone {
@Override
public void function() {
System.out.println("=== Iphone ===");
}
}
package com.llb.factory.simpleFactory.impl;
import com.llb.factory.simpleFactory.Phone;
/**
* 具体的手机厂商的手机
*/
public class HuaWei implements Phone {
@Override
public void function() {
System.out.println("=== HuaWei ===");
}
}
package com.llb.factory.simpleFactory;
public class Client {
public static void main(String[] args) {
/*
通过手机工厂生产手机
传入想要生产的手机的品牌获取对应的手机商
*/
Phone xm = PhoneFactory.createPhone("OPPO");
// 手机商生产手机
xm.function();
}
}