代码详解工厂方法模式和抽象工厂模式

代码详解工厂方法模式和抽象工厂模式

工厂方法模式

定义一个用于创建对象的接口,让子类决定实例化哪一个类,使一个类的实例化延迟到其子类

类图

2. 工厂方法模式(Factory Method Pattern) — Graphic Design Patterns

具体代码

以生产鼠标为例, 有一个抽象的鼠标工厂,工厂有两个实现,一个是戴尔鼠标工厂,一个是联想鼠标工厂,具体的抽象工厂子类,负责决定生产那种鼠标,将类的实例化延迟到了子类

抽象的鼠标工厂类

abstract class MouseFactory{
    //抽象方法
    abstract Mouse createMouse();
}

抽象工厂的具体实现类,也就是其子类

class DeilMouseFactory extends MouseFactory{
    public Mouse createMouse(){
        return new DeilMouse();
    }
}
class LenovoMouseFactory extends MouseFactory{
    public Mouse createMouse(){
        return new LenovoMouse();
    }
}

鼠标的抽象类,和具体的实现,比如戴尔鼠标,联想鼠标

abstract class Mouse{
    abstract String getName();
}
class DeilMouse extends Mouse{
    public String getName(){
        return "DeilMouse";
    }
}
class LenovoMouse extends Mouse{
    public String getName(){
        return "LenovoMouse";
    }
}

抽象工厂模式

提供一个创建一系列相关或者相互依赖对象的接口,而无需指定他们具体的类

类图

具体代码

上面的例子是生产鼠标,现在这个例子是生产PC。有一个抽象的PC工厂,主要两个抽象方法,一个生产鼠标,一个生产键盘。PC工厂的具体实现有戴尔工厂,联想工厂。各自生产自己类型的鼠标和键盘

abstract class PCFactory{
    //抽象方法
    abstract Mouse createMouse();
    abstract KeyBoard createKeyBoard();
}
class DeilPCFactory extends PCFactory{
    public Mouse createMouse(){
        return new DeilMouse();
    }
    public KeyBoard createKeyBoard(){
        return new DeilKeyBoard();
    }
}

class LenovoPCFactory extends PCFactory{
    public Mouse createMouse(){
        return new LenovoMouse();
    }
    public KeyBoard createKeyBoard(){
        return new LenovoKeyBoard();
    }
}

通过阅读上面的源码,或许你发现了,如果只有一个产品,抽象工厂模式直接退化为工厂方法模式。

参考文章

抽象工厂模式和工厂模式的区别? - 名姓的回答 - 知乎

原创文章 218 获赞 1220 访问量 22万+

猜你喜欢

转载自blog.csdn.net/zycxnanwang/article/details/106072955
今日推荐