美文网首页
【设计模式】- 工厂模式

【设计模式】- 工厂模式

作者: DoubleFooker | 来源:发表于2020-03-08 17:31 被阅读0次

工厂方法模式

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

/**
 * 工厂接口
 */
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();
    }
}

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

相关文章

  • 设计模式四、抽象工厂模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 抽象工厂模式 ...

  • 工厂模式

    java设计模式-工厂模式 工厂模式: 工厂模式是java设计模式里最常用的设计模式之一。 工厂模式属于创建型模式...

  • 设计模式之工厂模式

    设计模式之工厂模式 标签(空格分隔): 设计模式 工厂模式 设计模式的感念 设计模式的应用 工厂设计模式的产生 工...

  • 设计模式三、工厂模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 工厂模式 在一...

  • 设计模式一、单例模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 简单单例(推荐...

  • 单件设计模式

    一、定义 设计模式 设计模式就是一种更好的编写代码方案。 常见设计模式 工厂设计模式、抽象工厂设计模式、抽象工厂设...

  • iOS设计模式(三)之抽象工厂模式

    设计模式系列传送门 iOS设计模式(一)之简单工厂模式iOS设计模式(二)之工厂模式iOS设计模式(三)之抽象工厂...

  • iOS设计模式(一)之简单工厂模式

    设计模式系列传送门 iOS设计模式(一)之简单工厂模式iOS设计模式(二)之工厂模式iOS设计模式(三)之抽象工厂...

  • iOS设计模式(二)之工厂模式

    设计模式系列传送门 iOS设计模式(一)之简单工厂模式iOS设计模式(二)之工厂模式iOS设计模式(三)之抽象工厂...

  • 常用设计模式

    设计模式 工厂模式 工厂模式思路上分:简单工厂模式,工厂模式, 抽象工厂模式// 抽象工厂模式可以代替工厂模式,做...

网友评论

      本文标题:【设计模式】- 工厂模式

      本文链接:https://www.haomeiwen.com/subject/vdaukhtx.html