/**
* 工厂模式 - 简单工厂
*/
public class Factory {
public static Service getService(Integer type) {
if (Objects.equals(1, type)) {
return new ServiceImpl1();
} else if (Objects.equals(2, type)) {
return new ServiceImpl2();
} else {
return null;
}
}
}
interface Service {
void print();
}
class ServiceImpl1 implements Service {
public void print() {
System.out.println(ServiceImpl1.class);
}
}
class ServiceImpl2 implements Service {
public void print() {
System.out.println(ServiceImpl2.class);
}
}
/**
* 工厂模式 - 工厂方法
*/
public class Factory {
public static final Map<Integer, AbstractFactory> FACTORY_MAP = new HashMap<>();
static {
FACTORY_MAP.put(1, new Factory1());
FACTORY_MAP.put(2, new Factory2());
}
public static AbstractFactory getParserFactory(Integer type) {
if (Objects.equals(1, type)) {
return FACTORY_MAP.get(1);
} else if (Objects.equals(2, type)) {
return FACTORY_MAP.get(2);
} else {
return null;
}
}
}
interface AbstractFactory {
Service getInstance();
}
class Factory1 implements AbstractFactory {
@Override
public Service getInstance() {
return new ServiceImpl1();
}
}
class Factory2 implements AbstractFactory {
@Override
public Service getInstance() {
return new ServiceImpl2();
}
}
interface Service {
void print();
}
class ServiceImpl1 implements Service {
public void print() {
System.out.println(ServiceImpl1.class);
}
}
class ServiceImpl2 implements Service {
public void print() {
System.out.println(ServiceImpl2.class);
}
}
/**
* 工厂模式 - 抽象工厂
*/
public class Factory {
private Product1 product1;
private Product2 product2;
private Factory(AbstractFactory factory) {
this.product1 = factory.createProduct1();
this.product2 = factory.createProduct2();
}
public Product1 getProduct1() {
return product1;
}
public Product2 getProduct2() {
return product2;
}
@Override
public String toString() {
return "Factory{" +
"product1=" + product1 +
", product2=" + product2 +
'}';
}
}
interface AbstractFactory {
Product1 createProduct1();
Product2 createProduct2();
}
interface Product1 {
}
interface Product2 {
}
class XFactory implements AbstractFactory {
@Override
public Product1 createProduct1() {
return new XProduct1();
}
@Override
public Product2 createProduct2() {
return new XProduct2();
}
}
class YFactory implements AbstractFactory {
@Override
public Product1 createProduct1() {
return new YProduct1();
}
@Override
public Product2 createProduct2() {
return new YProduct2();
}
}
class XProduct1 implements Product1 {
}
class XProduct2 implements Product2 {
}
class YProduct1 implements Product1 {
}
class YProduct2 implements Product2 {
}