【设计模式】- 工厂模式

99 阅读2分钟

工厂方法模式

定义一个创建对象的接口,但让实现这个接口的类来决定实例化那个类,工厂方法让类的实例化推迟带子类中进行。 缺点:创建的类过多

/**
 * 工厂接口
 */
public interface IFactory {
    IObj create();
}

/**
 * 对象接口
 */
public interface IObj { 
    void doSomeing();
}

/**
 * A对象实现类
 */
public class AObj implements IObj {
    public void doSomeing() {
        System.out.println("A Obj Method");
    }
}

/**
 * B对象实现类
 */
public class BObj implements IObj {
    public void doSomeing() {
        System.out.println("B Obj Method");
    }
}

/**
 * 只负责创建具体A对象的工厂类
 */
public class AObjFactory implements IFactory {
    @Override
    public IObj create() {
        return new AObj();
    }
}

/**
 * 只负责创建具体B对象的工厂类
 */
public class BObjFactory implements IFactory {
    @Override
    public IObj create() {
        return new BObj();
    }
}

抽象工厂

抽象工厂是提供创建一系列相关的或相互依赖对象接口,无须指定具体实现类。与工厂方法不同的是抽象工厂用于创建多种对象,强调的是产品族的概念。 缺点:需要确定产品族中可能的产品,对拓展产品时需要修改抽象工厂的接口,增加系统抽象程度和可理解性。

/**
 * 工厂抽象类,也可用接口
 */
public abstract AbsFactory {
    // 共同逻辑
    public void preJob(){
        System.out.println("init  something");
    }
    public abstract IObjA createA();
    public abstract IObjB createB();
}

/**
 * 对象A接口
 */
public interface IObjA { 
    void doSomeing();
}
/**
 * 对象B接口
 */
public interface IObjB { 
    void doSomeing();
}

/**
 * A对象实现类
 */
public class AObj1 implements IObjA {
    public void doSomeing() {
        System.out.println("A Obj Method");
    }
}
/**
 * A对象实现类
 */
public class AObj2 implements IObjA {
    public void doSomeing() {
        System.out.println("A Obj Method");
    }
}

/**
 * B对象实现类
 */
public class BObj1 implements IObjB {
    public void doSomeing() {
        System.out.println("B Obj Method");
    }
}
/**
 * B对象实现类
 */
public class BObj2 implements IObjB {
    public void doSomeing() {
        System.out.println("B Obj Method");
    }
}

/**
 * 工厂类1
 */
public class ObjFactory1 extends AbsFactory {
    public IObjA createA() {
        return new AObj1();
    }
    public IObjB createB() {
        return new BObj1();
    }
}

/**
 * 工厂类2
 */
public class ObjFactory2 implements AbsFactory {
    public IObjA createA() {
        return new AObj2();
    }
    public IObjB createB() {
        return new BObj2();
    }
}

工厂类常常结合单例模式使用,使用时基于接口调用,而不是具体的实现类。


公众号:

公众号.jpg