1. 抽象工厂模式
public class AbstractFactory {
interface Car {
void driver();
}
class Benz implements Car {
@Override
public void driver() {
System.out.println("Benz driving");
}
}
class BMW implements Car {
@Override
public void driver() {
System.out.println("Benz driving");
}
}
interface CarFactory {
Car create();
}
class BenzFactory implements CarFactory {
@Override
public Car create() {
return new Benz();
}
}
class BMWFactory implements CarFactory {
@Override
public Car create() {
return new BMW();
}
}
}
2. 单例模式(常见的实现方式有 1. 饿汉式 2. 双检查+volatile 3. Holder辅助类,参看下方代码 4. enum类实现)
/**
* @authod: pp_lan on 2020/3/19.
* 常见的为double-check + volatile 实现
* 此处使用 静态类Holder 实现
*/
public class SingleTon {
private SingleTon instance;
private SingleTon () {
}
public static SingleTon getInstance() {
return Holder.instance;
}
static class Holder {
private static SingleTon instance = new SingleTon();
}
}
/**
* @authod: pp_lan on 2020/3/19.
* 使用enum辅助实现
*/
public class SingleTon2 {
private SingleTon2() {
}
public static SingleTon2 getInstance() {
return EnumHolder.INSTANCE.singleTon;
}
private enum EnumHolder {
INSTANCE;
private SingleTon2 singleTon;
EnumHolder() {
this.singleTon = new SingleTon2();
}
}
}
3. 建造者
public class ConcreateBuilder extends Builder {
@Override
public void buildPartA() {
this.product.setPartA("建造A部分");
System.out.println();
}
@Override
public void buildPartB() {
this.product.setPartB("建造B部分");
}
@Override
public void buildPartC() {
this.product.setPartC("建造C部分");
}
@Override
public Product getResult() {
buildPartA();
buildPartB();
buildPartC();
return super.getResult();
}
}
public abstract class Builder {
protected Product product = new Product();
public abstract void buildPartA();
public abstract void buildPartB();
public abstract void buildPartC();
public Product getResult () {
return this.product;
}
}
public class Product {
String partA;
String partB;
String partC;
public String getPartA() {
return partA;
}
public void setPartA(String partA) {
this.partA = partA;
}
public String getPartB() {
return partB;
}
public void setPartB(String partB) {
this.partB = partB;
}
public String getPartC() {
return partC;
}
public void setPartC(String partC) {
this.partC = partC;
}
}