設計模式-工廠方法模式

1.工廠方法模式

工廠方法模式定義:用於建立對象的接口,讓子類決定實例化哪一個類。java

一種工廠模式的例子。ide

抽象產品類spa

public abstract class Product {

    public void method1(){
//    業務邏輯
    }

    public abstract void method2();

}

具體產品類code

public class CreateProduct1 extends Product {

    @Override
    public void method2() {

    }
}


public class CreateProduct extends Product {

    @Override
    public void method2() {

    }
}

抽象工廠類對象

public abstract class Creator {
    public abstract < T extends Product> T createProduct(Class<T> c);
}

具體工廠實現類接口

public class ConcreteCreator extends Creator {
    @Override
    public <T extends Product> T createProduct(Class<T> c) {
        Product product = null;
        try{
           product = (Product)Class.forName(c.getName()).newInstance();
        }catch (Exception e){

        }
        return (T)product;
    }
}

調用端get

public class Client {
    public static void main(String args[]){
        Creator creator = new ConcreteCreator();
        Product product = creator.createProduct(CreateProduct1.class);
    }
}

工廠方法模式擴展產品

  1. 簡單工廠模式(靜態工廠模式)
    io

public class ConcreteCreatorExt {
    public static <T extends Product> T createProduct(Class<T> c) {
        Product product = null;
        try{
           product = (Product)Class.forName(c.getName()).newInstance();
        }catch (Exception e){

        }
        return (T)product;
    }
}

2.替代單例模式class

public class Singleton1 {

    private Singleton1(){

    }
    public void doSomething{

    }

}


public class SingletonFactory {
    private static Singleton1 singleton;

    static {
        try {
            Class c1 = Class.forName(Singleton1.class.getName());
            Constructor constructor = c1.getConstructor();
            constructor.setAccessible(true);
            singleton = (Singleton1)constructor.newInstance();
        }catch (Exception e){

        }
    }

    public static Singleton1 getSingleton(){
        return singleton;
    }
}

3.延遲初始化

一個對象被消費完畢後,並不馬上釋放,工廠類保持其初始化狀態,等待再次被調用。

public class ProductFactory {
    private static final Map<String,Product> map = new HashMap();

    public static synchronized Product createProduct(String type) throws Exception{
        Product product = null;
        if(map.containsKey(type)){
            product = map.get(type);
        }else{
            product = new CreateProduct();
            map.put(type,product);
        }
        return product;
    }
}

2.抽象工廠模式

抽象工廠模式:爲建立一組相關或相互依賴的對象提供一個接口,而且無需指定他們的具體的實現類。

通用代碼:

抽象product A

public abstract class AbstractProductA {

//
    public void shareMethod(){
//    業務邏輯
    }

    public abstract void method2();

}

具體實現類

public class ProductA1 extends AbstractProductA {

    @Override
    public void method2() {

    }
}
public class ProductA2 extends AbstractProductA {

    @Override
    public void method2() {

    }
}

抽象product B

public abstract class AbstractProductB {

//
    public void shareMethod(){
//    業務邏輯
    }

    public abstract void method2();

}

具體實現類

public class ProductB1 extends AbstractProductB {

    @Override
    public void method2() {

    }
}

抽象建立類

public abstract class AbstractCreator {

    public abstract AbstractProductA createProductA();

    public abstract AbstractProductB createProductB();
}

具體實現類

public class Creator1 extends AbstractCreator {

    @Override
    public AbstractProductA createProductA() {
        return new ProductA1();
    }

    @Override
    public AbstractProductB createProductB() {
        return new ProductB1();
    }
}
相關文章
相關標籤/搜索