1. 工厂模式【生产对象】
- 创建接口,然后根据我们传送给工厂的信息来生产我们需要的对象。
【生产对象】
- 工厂模式实现流程
public interface Shape{}
public class Rectangle implements Shape{}
public class Square implements Shape{}
public class Circle implements Shape{}
public class ShapeFactory{}
2. 抽象工厂模式【用来生产小工厂的大工厂】
- 工厂的工厂,先生产工厂,然后再由工厂生产对象。
【用来生产小工厂的大工厂】
- 抽象工厂模式实现流程
public interface Shape();
public interface Color();
public class Rectangle implements Shape{}
public class Square implements Shape{}
public class Circle implements Shape{}
public class Red implements Color {}
public class Green implements Color {}
public class Blue implements Color {}
public abstract class AbstractFactory{}
public class ShapeFactory extends AbstratFactory{}
public class ColorFactory extends AbstratFactory{}
public class factoryProducer{}
3. 单例模式【共享同一个对象】
- 确保只有单个对象被创建
【共享同一个对象】
- 单例模式多个实现方式
public class Singleton {
private static Singleton instance;
private Singleton (){}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton (){}
public static Singleton getInstance() {
return instance;
}
}
public class Singleton {
private volatile static Singleton singleton;
private Singleton (){}
public static Singleton getSingleton() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}
public class Singleton {
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
private Singleton (){}
public static final Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
public enum Singleton {
INSTANCE;
public void whateverMethod() {}
}
4. 建造者模式【一层层的完善】
- 使用多个简单的对象一步一步的构建成一个复杂的对象。相同的构建过程可以创建不同的表示。
【一层层的完善】
- 建造者模式实现流程
public interface Item{public Packing packing()}
public inteface Packing{}
public class Wrapper implements Packing{}
public class Bottle implements Packing{}
public abstract class Burger implements Item{
@Override
public Packing packing(){
return new Wrapper();
}
}
public abstract class ColdDrink implements Item{
@Override
public Packing packing(){
return new Bottle();
}
}
public class VegBurger extends Burger{}
public class ChickenBurger extends Burger{}
public class Coke extends ColdDrink{}
public class Pepsi extends ColdDrink{}
public class Meal {
private List<Item> items = new ArrayList<Item>();
public void addItem(Item item){
items.add(item);
}
}
public class MealBuilder {
public Meal prepareVegMeal (){
Meal meal = new Meal();
meal.addItem(new VegBurger());
meal.addItem(new Coke());
return meal;
}
public Meal prepareNonVegMeal (){
Meal meal = new Meal();
meal.addItem(new ChickenBurger());
meal.addItem(new Pepsi());
return meal;
}
}
5. 原型模式【Hashtable和Cloneable】
- 用于创建重复的对象,同时又能保证性能。用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
【Hashtable和Cloneable】
- 原型模式实现流程
public abstract class Shape implements Cloneable{
public Object clone() {
Objec clone = null;
try{
clone = super.clone();
} catch(CloneNotSupportedException e) {
e.printStackTrace();
}
return clone;
}
}
public class Rectangle extends Shape{}
public class Square extends Shape {}
public class Circle extends Shape {}
public class ShapeCache {
private static Hashtable<String, Shape> shapeMap
= new Hashtable<String, Shape>();
public static Shape getShape(String shapeId) {
Shape cachedShape = shapeMap.get(shapeId);
return (Shape) cachedShape.clone();
}
public static void loadCache() {
Circle circle = new Circle();
circle.setId("1");
shapeMap.put(circle.getId(),circle);
Square square = new Square();
square.setId("2");
shapeMap.put(square.getId(),square);
Rectangle rectangle = new Rectangle();
rectangle.setId("3");
shapeMap.put(rectangle.getId(),rectangle);
}
}