欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java23种设计模式(一)工厂方法模式

程序员文章站 2022-05-18 19:34:16
在说工厂方法模式之前,先了解一下简单工厂模式。工厂方法模式其实是在简单工厂上面做了一些增强。 简单工厂模式:有一个专门的类来生产其他类的实例,生产的这些实例有一个共同父类。 这个跟我们的多态有一点像。 例子: 假如我们有一个鼠标工厂,这个工厂既可以生产联想鼠标,又可以生产宏碁鼠标。 代码如下: 1、 ......

在说工厂方法模式之前,先了解一下简单工厂模式。工厂方法模式其实是在简单工厂上面做了一些增强。
简单工厂模式:有一个专门的类来生产其他类的实例,生产的这些实例有一个共同父类。这个跟我们的多态有一点像。
例子:
假如我们有一个鼠标工厂,这个工厂既可以生产联想鼠标,又可以生产宏碁鼠标。
代码如下:
1、鼠标工厂(可以生产联想鼠标和宏碁鼠标)

public class mousefactory {

    /**
     * 生产一个鼠标
     * @param i
     * @return
     */
     public mouse createmouse(int i){

        mouse mouse = null;
        switch (i){
            case 1:
                mouse = new lenovomouse();
                break;
            case 2:
                mouse = new acermouse();
                break;
        }
        return mouse;
    }
}

2、鼠标接口(有一个getname()的方法)

public interface mouse {

    void getname();
}

3、联想鼠标实现类(实现鼠标接口,可以生产联想鼠标)

public class lenovomouse implements mouse {
    @override
    public void getname() {
        system.out.println("这个是联想鼠标");
    }
}

4、宏碁鼠标实现类(实现鼠标接口,可以生产宏碁鼠标)

public class acermouse implements mouse {
    @override
    public void getname() {
        system.out.println("这个是宏碁鼠标");
    }
}

5、客户端(需要鼠标的人,可以买联想鼠标也可以买宏碁鼠标)

@springboottest
class factoryapplicationtests {

    @test
    void contextloads() {

        mousefactory factory = new mousefactory();
        mouse mouse = factory.createmouse(2);
        mouse.getname();
    }

这样简单工厂就算实现了,可以传入1和2让工厂分别生成联想鼠标和宏碁鼠标。
接下来我们在简单工厂的基础上看看工厂方法模式。
工厂方法模式:定义一个专门生产其他类实例的接口,让子类决定具体生产哪个类的实例。
例子:
有一个鼠标工厂开了两个子公司,一个是联想鼠标工厂用来专门生产联想鼠标,另一个是宏碁鼠标工厂用来专门生产宏碁鼠标。
代码如下:
1、鼠标工厂接口:

public interface mousefactory {

    mouse createmouse();
}

2、联想鼠标工厂(用来生产联想鼠标)

public class lenovomousefactory implements mousefactory {
    @override
    public mouse createmouse() {
        return new lenovomouse();
    }
}

3、宏碁鼠标工厂(用来生产宏碁鼠标)

public class acermousefactory implements mousefactory {
    @override
    public mouse createmouse() {
        return new acermouse();
    }
}

鼠标类跟简单工厂一样,复制如下:
4、鼠标接口(有一个getname()的方法)

public interface mouse {

    void getname();
}

5、联想鼠标实现类(实现鼠标接口,可以生产联想鼠标)

public class lenovomouse implements mouse {
    @override
    public void getname() {
        system.out.println("这个是联想鼠标");
    }
}

6、宏碁鼠标实现类(实现鼠标接口,可以生产宏碁鼠标)

public class acermouse implements mouse {
    @override
    public void getname() {
        system.out.println("这个是宏碁鼠标");
    }
}

7、客户端(需要鼠标的人,可以买联想鼠标也可以买宏碁鼠标)

@springboottest
class factoryapplicationtests {
    @test
    void demo(){

        lenovomousefactory lenovomousefactory = new lenovomousefactory();
        mouse lenovomouse = lenovomousefactory.createmouse();
        lenovomouse.getname();

        acermousefactory acermousefactory = new acermousefactory();
        mouse acermouse = acermousefactory.createmouse();
        acermouse.getname();
    }
}

我们可以通过不同的工厂来获取不同实例,假如我们想买一个联想鼠标,则去联想工厂买。想买宏碁鼠标,则去宏碁工厂买。
这样,我们就实现了工厂方法模式,假如我们想要一个华硕鼠标,则建一个华硕工厂去生产华硕鼠标即可。

如果文章对您有帮助,请记得点赞关注哟~
欢迎大家关注我的公众号,每日技术推送文章供大家学习参考。

情系it>