1.简单工厂模式
角色:抽象产品,具体产品,工厂类
抽象产品
public abstract class AbstractClass {
abstract void abstractClass();
}
具体产品1
public class SpecificClass1 extends AbstractClass{
@Override
void abstractClass() {
System.out.println("SpecificClass1");
}
}
具体产品2
public class SpecificClass2 extends AbstractClass{
@Override
void abstractClass() {
System.out.println("abstractClass2");
}
}
工厂类
@Data
public class FactoryClass {
private String type;
private AbstractClass abstractClass;
public FactoryClass() {
}
public FactoryClass(String name) {
this.type = name;
}
public AbstractClass factoryClass() {
if (type.equals("S1")) {
abstractClass = new SpecificClass1();
} else if (type.equals("S2")) {
abstractClass = new SpecificClass2();
} else {
throw new RuntimeException("不支该方法!");
}
return abstractClass;
}
}
客户端测试
public class Main {
public static void main(String[] args) {
FactoryClass factoryClass = new FactoryClass();
factoryClass.setType("S1");
factoryClass.factoryClass().abstractClass();
new FactoryClass("S2").factoryClass().abstractClass();
}
}
测试打印结果
2.工厂方法模式
角色:抽象产品,具体产品,抽象工厂,具体工厂
抽象产品
public abstract class AbstractRole {
abstract void print();
}
具体产品1
public class AuthenticRole1 extends AbstractRole{
@Override
void print() {
System.out.println("AuthenticRole1");
}
}
具体产品2
public class AuthenticRole2 extends AbstractRole{
@Override
void print() {
System.out.println("AuthenticRole2");
}
}
抽象工厂
public interface AbstractFactory {
AbstractRole get();
}
实际工厂1
public class AuthenticFactory1 implements AbstractFactory{
@Override
public AbstractRole get() {
return new AuthenticRole1();
}
}
实际工厂2
public class AuthenticFactory2 implements AbstractFactory{
@Override
public AbstractRole get() {
return new AuthenticRole2();
}
}
客户端测试
public class Mian {
public static void main(String[] args) {
new AuthenticFactory1().get().print();
new AuthenticFactory2().get().print();
new AuthenticFactory3().get().print();
}
}