设计模式-单例模式、工厂模式

一、单例模式

1、饿汉模式

public class Singleton {
    private static Singleton uniqueInstance = new Singleton();
    private Singleton() {
    }
}

2、懒汉式-线程安全

public class Singleton {
    private static Singleton uniqueInstance;
    private Singleton() {
    }
    public static synchronized Singleton getUniqueInstance() {
        if (uniqueInstance == null) {
            uniqueInstance = new Singleton();
        }
        return uniqueInstance;
    }
}

二、工厂模式

1、简单工厂模式

public interface Product {
}
public class ConcreteProduct implements Product {
}
public class ConcreteProduct1 implements Product {
}
public class ConcreteProduct2 implements Product {
}

public class Client {
    public static void main(String[] args) {
        int type = 1;
        Product product;
        if (type == 1) {
        product = new ConcreteProduct1();
        } else if (type == 2) {
       product = new ConcreteProduct2();
        } else {
        product = new ConcreteProduct();
        }
        // do something with the product
    }
}        

2、工厂方法

public abstract class Factory {
  abstract public Product factoryMethod();
  public void doSomething() {
  Product product = factoryMethod();
  // do something with the product
  }
}
public class ConcreteFactory extends Factory {
  public Product factoryMethod() {
    return new ConcreteProduct();
  }
}
public class ConcreteFactory1 extends Factory {
  public Product factoryMethod() {
    return new ConcreteProduct1();
  }
}
public class ConcreteFactory2 extends Factory {
  public Product factoryMethod() {
    return new ConcreteProduct2();
  }
}

3、抽象工厂模式

public class AbstractProductA {
}

public class AbstractProductB {
}

public class ProductA1 extends AbstractProductA {
}

public class ProductA2 extends AbstractProductA {
}

public class ProductB1 extends AbstractProductB {
}

public class ProductB2 extends AbstractProductB {
}

public abstract class AbstractFactory {
    abstract AbstractProductA createProductA();

    abstract AbstractProductB createProductB();
}

public class ConcreteFactory1 extends AbstractFactory {
    AbstractProductA createProductA() {
        return new ProductA1();
    }

    AbstractProductB createProductB() {
        return new ProductB1();
    }
}

public class ConcreteFactory2 extends AbstractFactory {
    AbstractProductA createProductA() {
        return new ProductA2();
    }

    AbstractProductB createProductB() {
        return new ProductB2();
    }
}

public class Client {
    public static void main(String[] args) {
        AbstractFactory abstractFactory = new ConcreteFactory1();
        AbstractProductA productA = abstractFactory.createProductA();
        AbstractProductB productB = abstractFactory.createProductB();
// do something with productA and productB
    }
}

猜你喜欢

转载自www.cnblogs.com/strong-FE/p/11656546.html