设计模式(二)——工厂模式

工厂模式

简单工厂模式

简单工厂模式(Simple Factory Pattern),又称为静态工厂方法(static Factory Method),它属于建立型模式。
在简单工厂模式中,能够根据参数的不一样返回不一样类的实例。简单工厂模式专门定义一个类来负责建立其余类的实例,被建立的实例一般都具备共同的父类。
好比有一个电脑商,目前生产联想电脑,随着业务扩展,他如今须要生产惠普的电脑,咱们就须要一个单独的类来专门生产电脑,这就用到了简单工厂模式。
下面以代码为例:java

接口:git

package designpattern.factory.simplefactory.noodles;

public interface INoodles {
    /**
     * 描述每种面条啥样的
     */
    public abstract void desc();
}
package designpattern.factory.simplefactory.noodles;

public class LzNoodles implements INoodles {
    @Override
    public void desc() {
        System.out.println("兰州拉面,兰州特点小吃");
    }
}
package designpattern.factory.simplefactory.noodles;

public class PaoNoodles implements INoodles {
    @Override
    public void desc() {
        System.out.println("泡面,程序员必备");
    }
}
package designpattern.factory.simplefactory.noodles;

public class ReganNoodles implements INoodles {
    @Override
    public void desc() {
        System.out.println("红油热干面,武汉特点小吃");
    }
}
简单工厂模式
package designpattern.factory.simplefactory;

import designpattern.factory.simplefactory.noodles.INoodles;
import designpattern.factory.simplefactory.noodles.LzNoodles;
import designpattern.factory.simplefactory.noodles.PaoNoodles;
import designpattern.factory.simplefactory.noodles.ReganNoodles;

/**
 * 简单工厂模式
 * 一家“简单面馆”(简单工厂类)
 */
public class SimpleNoodlesFactory {

    public static final int TYPE_LZ = 1;//兰州拉面
    public static final int TYPE_PM = 2;//泡面
    public static final int TYPE_GK = 3;//热干面

    /**
     * 若是生产对象的方法是static的,这种简单工厂也叫作静态工厂
     * 若是生产对象的方法不是static的,这种简单工厂也叫作实例工厂
     * @param type
     * @return
     */
    public static INoodles createNoodles(int type) {
        switch (type) {
            case 1:
                return new LzNoodles();
            case 2:
                return new PaoNoodles();
            case 3:
                return new ReganNoodles();
            default:
                return new LzNoodles();
        }
    }
}

测试

package designpattern.factory.simplefactory;

import designpattern.factory.simplefactory.noodles.INoodles;
import designpattern.factory.simplefactory.noodles.LzNoodles;

public class Test {

    public static void main(String[] args) {
        /**
         *  一开始,穷,想吃面必须得本身作
         *  想吃拉面得本身作,new LzNoodles()
         *  想吃泡面得本身作,new PaoNoodles()
         *  想吃热干面得本身作,new ReganNoodles()
         */
        // 作拉面吃
        INoodles lzNoodles = new LzNoodles();
        // 作泡面吃
        // INoodles paoNoodles = new PaoNoodles();
        // 作热干面吃
        // INoodles reganNoodles = new ReganNoodles();

        // 然而,new来new去,改来改去,好心烦......

        /**
         * 突然,有一天走了狗屎运成了暴发户
         * 幸福生活今后来临,吃面今后变得简单
         * 给面馆说一声想吃啥,面馆作好了给本身就行了
         * 本身没必要关心面条怎么作(怎么new,如何new)让面馆操心去吧(面馆帮咱们new)!
         * 好省心,有钱就是好,太爽了!
         */
        INoodles iNoodles = SimpleNoodlesFactory.createNoodles(2);  // 和具体的对象脱离关系
        iNoodles.desc();

        /**考虑使用工厂模式
         * 1) 当客户程序不须要知道要使用对象的建立过程。
         * 2) 客户程序使用的对象存在变更的可能,或者根本就不知道使用哪个具体的对象。
         */
    }
}

工厂方法模式

工厂方法模式是比较复杂一点的工厂模式的体现,主要是经过建立工厂类来进行对对象的构建。程序员

package designpattern.factory.factorymethod;


import designpattern.factory.simplefactory.noodles.INoodles;

/**
 * 工厂方法模式
 */
public interface INoodlesFactory {
     INoodles createNoodles();
}
package designpattern.factory.factorymethod;


import designpattern.factory.simplefactory.noodles.INoodles;
import designpattern.factory.simplefactory.noodles.LzNoodles;

public class LzINoodlesFactory implements INoodlesFactory {
    @Override
    public INoodles createNoodles() {
        return new LzNoodles();
    }
}
package designpattern.factory.factorymethod;


import designpattern.factory.simplefactory.noodles.INoodles;
import designpattern.factory.simplefactory.noodles.PaoNoodles;

public class PaoINoodlesFactory implements INoodlesFactory {
    @Override
    public INoodles createNoodles() {
        return new PaoNoodles();
    }
}
package designpattern.factory.factorymethod;


import designpattern.factory.simplefactory.noodles.INoodles;
import designpattern.factory.simplefactory.noodles.ReganNoodles;

public class ReganINoodlesFactory implements INoodlesFactory {
    @Override
    public INoodles createNoodles() {
        return new ReganNoodles();
    }
}

测试类

package designpattern.factory.factorymethod;


import designpattern.factory.simplefactory.noodles.INoodles;

public class Test {
    public static void main(String[] args) {
        INoodlesFactory noodlesFactory = new LzINoodlesFactory();
        INoodles noodles = noodlesFactory.createNoodles();
        noodles.desc();
    }
}

代码实例:
设计模式demo设计模式

相关文章
相关标签/搜索