java设计模式之简单工厂模式

36 篇文章 0 订阅
20 篇文章 0 订阅

设计模式系列
简单工厂模式
       解释:定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的类的实例通常都具有共同的父类。
       简单工厂模式一般都含有以下三个角色:
       1.Factory(工厂角色):该模式的核心,负责实现创建所有产品实例的内部逻辑。
       2.Product(抽象产品角色):它是工厂类创建的所有产品对象的父类。
       3.ConcreteProduct(具体产品角色):它是简单工厂模式的创建目标,所有被创建的对象都充当这个角色的某个具体类的实例。
       下面我将以一个例子来说明一下:
       使用简单工厂模式来模拟女娲造人,如果向造人的工厂传入参数M,则返回一个男人对象,如果传入W,则返回一个女人对象,如果传入一个R,则返回一个机器人对象。在这里插入图片描述
       第一步:创建Person接口(抽象产品角色)

/**
 * 定义一个造人的接口
 */
public interface Person {

    /**
     * 造人的方法
     */
    void getPerson();
}

       第二步:创建具体产品角色:造人的车间 : 男人 女人和机器人三个车间

/**
 * 造男人的车间
 */
public class PersonMan implements Person{
    /**
     * 造男人的方法
     */
    public void getPerson() {
        //造男人的细节
        System.out.println("男人产生了。。。");
    }
}
/**
 * 造机器人的车间
 */
public class PersonRobot implements Person{
    /**
     * 造机器人的方法
     */
    public void getPerson() {
        //造机器人的细节
        System.out.println("机器人产生了。。。。");
    }
}
/**
 * 造女人的车间
 */
public class PersonWoman implements Person{
    /**
     *造女人的方法
     */
    public void getPerson() {
        //造女人的细节
        System.out.println("女人产生了。。。。");
    }
}

       第三步:创建工厂角色:造人的工厂

/**
 * 造人的工厂
 */
public class GetPersonFactory {
    /**
     * 定义要造的人
     */
    Person person;
    /**
     * 造人的方法
     */
    public Person getPerson(String personType){
        //M则造男人 用造男人的车间
        if("M".equals(personType)){
            person = new PersonMan();
            //如果是M 则造女人
        }else if("W".equals(personType)){
            person=new PersonWoman();
            //如果是R 则造机器人
        }else if("R".equals(personType)){
            person=new PersonRobot();
        }
        return person;
    }
}

       以上已经完成了一个简单工厂模式 接下来我们进行测试:

/**
 * 造人测试
 */
public class PersonTest {

    @Test
    public void NeedPerson(){
        GetPersonFactory getPersonFactory=new GetPersonFactory();
        //获取造人的车间
        Person person = getPersonFactory.getPerson("W");
        //调用车间造人的方法 开始造人
        person.getPerson();
        System.out.println(person);
    }
}

       控制台会输出:

女人产生了。。。。
DesignPattern.SimpleFactory.PersonWoman@13a5fe33

       至此简单工厂模式搞定并测试通过。
       最后再说下简单工厂模式的优缺点以及使用的场景:
       优点:
       1.工厂类包含必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例。简单工厂模式实现了对象创建和使用的分离。
       2.客户端无需知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可。
       缺点:
       1.由于工厂类集中了所有的产品逻辑,所以一旦不能正常工作整个系统的造人都会受到影响。
       2.增加了类的个数(引入了新的工厂类)。
       3.系统扩展困难,一旦需要添加新产品(造阴阳人等)就不得不修改工厂逻辑。
       适用场景:
       1.工厂类负责创建的对象比较少,由于对象比较少,不会造成工厂方法中的业务逻辑太过复杂。
       2.客户端只知道传入工厂类(造人的工厂)的参数,对于如何创建对象(造人车间)并不关心。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值