码迷,mamicode.com
首页 > 其他好文 > 详细

雷锋依然在人间-工厂模式

时间:2018-05-25 19:31:17      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:实例   应该   break   bre   int   str   创建   模式   继承   

简单(静态)工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。

该模式中包含的角色及其职责
  工厂(Creator)角色
简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。
  抽象产品(Product)角色
简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
  具体产品(Concrete Product)角色
是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。

例子背景是“学雷锋行动“,大学生和社区志愿者帮助孤寡老人:
package factory;
//雷锋接口,包含扫地、洗衣、买米的方法
public interface LeiFeng {
    void sweep();
    void wash();
    void buyRice();
}

实现类一:大学生雷锋

package factory;

/**
 *大学生雷锋
 */
public class UnderGraduate implements LeiFeng {

    @Override
    public void sweep() {
        System.out.println("大学生雷锋帮忙扫地");
    }

    @Override
    public void wash() {
        System.out.println("大学生雷锋帮忙洗衣");
    }

    @Override
    public void buyRice() {
        System.out.println("大学生雷锋帮忙买米");
    }
}

实现类二:社区志愿者

package factory;

public class Volunteer implements LeiFeng {

    @Override
    public void sweep() {
        System.out.println("社区志愿者帮忙扫地");
    }

    @Override
    public void wash() {
        System.out.println("社区志愿者帮忙洗衣");
    }

    @Override
    public void buyRice() {
        System.out.println("社区志愿者帮忙买米");
    }

}

简单工厂类:

package factory;

public class SimplyFactory {
    public static final String UNDERGTADUATE = "1";
    public static final String VOLUNTEER = "2";
    
    public static LeiFeng getLeiFeng(String name){
        LeiFeng leifeng = null;
        switch (name) {
            case (UNDERGTADUATE):
                leifeng = new UnderGraduate();
                break;

            case(VOLUNTEER):
                leifeng = new Volunteer();
                break;
            }
        return leifeng;
    }
}

测试类:

package factory;

public class Test {

    public static void main(String[] args) {
        LeiFeng leifeng1 = SimplyFactory.getLeiFeng(SimplyFactory.UNDERGTADUATE);
        leifeng1.buyRice();
        LeiFeng leifeng2 = SimplyFactory.getLeiFeng(SimplyFactory.VOLUNTEER);
        leifeng2.buyRice();
    }
}
结果:
技术分享图片
优缺点:
技术分享图片
下面看一下工厂模式,是简单工厂模式的改进。

技术分享图片

 例子:LeiFeng,UnderGraduate,Volunteer这三个类代码就不粘贴了。

//工厂接口,只包含一个方法,创造雷锋
public
interface IFactory { LeiFeng createLeiFeng(); }

大学生雷锋工厂类:

public class UnderGraduateFactory implements IFactory {

    @Override
    public LeiFeng createLeiFeng() {
        return new UnderGraduate();
    }

}

社区志愿者工厂类:

public class VolunteerFactory implements IFactory {

    @Override
    public LeiFeng createLeiFeng() {
        return new Volunteer();
    }

}

测试类:

public class Test {
    public static void main(String[] args) {
        IFactory iFactory = new UnderGraduateFactory();//改成VolunteerFactory,就成了社区志愿者
        LeiFeng leifeng = iFactory.createLeiFeng();
        leifeng.sweep();
    }
}

结果:

技术分享图片

工厂模式优缺点:

技术分享图片

 

 参考书籍:《大话设计模式》第八章 雷锋依然在人间-工厂方法模式

雷锋依然在人间-工厂模式

标签:实例   应该   break   bre   int   str   创建   模式   继承   

原文地址:https://www.cnblogs.com/caozx/p/9089899.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!