1.工厂模式-简单工厂模式

1.背景

     (1)首先理解什么是工厂?

            为了方便理解,这里就不用专业词汇描述,个人感觉工厂就是生产各种各样商品的地方。而对于java来说就是new出各种各样的对象。

           例如:上面的事例,客户需要一个猫,工厂就得new一个猫对象,需要一个狗,就需要new一个狗对象。

           1.1不用工厂代码

                猫:

public class Cat {
}

              狗:

public class Dog {
}

      客户(也可以称之为消费者) :

public class Customer {
    public static void main(String[] args) {
        //买了一只猫
        Cat cat = new Cat();
        //买了一只狗
        Dog dog = new Dog();
    }
}

          客户类main方法里面的代码,存在如下问题?

          对于我们客户来说,去宠物店,只需要知道,这个宠物店,有哪些动物就行,而不需要知道,关于这些动物是怎么来的。

这也是我们开发中,很重要的一个思想,业务逻辑解耦,各自只关心,各自的模块。

             1.2.使用简单工厂模式

public interface Animal {
    public void eat();
}
public class AnimalFactory {
    public  static  Animal productAnimal(String msg){
        if(msg.equals("猫")){
            return  new Cat();
        }else if(msg.equals("狗")){
            return new Dog();
        };
        return null;
    };
}

 

public class Cat implements  Animal{
    @Override
    public void eat() {
            System.out.println("猫正在吃鱼。。。");
    }
}
public class Dog implements Animal{
    @Override
    public void eat() {
        System.out.println("狗正在吃骨头。。。");
    }
}

 

public class Customer {
    public static void main(String[] args) {
        AnimalFactory.productAnimal("猫").eat();
        AnimalFactory.productAnimal("狗").eat();
    }
}

 使用简单工厂模式,首先,得分析每个产品的共性,例如,猫和狗,都是动物,所以,抽取勒一个动物接口。再有,就是具有一定的逻辑,根据,传的猫和狗的值不同,工厂创建的对象也不同,这就是简单工厂模式。 

             1.2.1 可扩展性不强

                    不遵循"开闭原则"。

                     什么是开闭原则?

                     一个软件应该通过扩展来实现变化,而不是修改已有代码来实现变化。

                     说到这里,分析一下,上面的工厂demo,已有猫,狗,如果现在需要增加一个猪,工厂的代码就得变化      

public class AnimalFactory {
    public  static  Animal productAnimal(String msg){
        if(msg.equals("猫")){
            return  new Cat();
        }else if(msg.equals("狗")){
            return new Dog();
        }else if(msg.equals("猪")){
            return new Pig();
        };
        return null;
    };
}

 

2.描述

顾名思义就是这个工厂很简单,能在业务简单的情况下使用。

3.关键点

   工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑,在java中往往由一个类实现

   抽象产品角色:它一般是具体产品的父类或者需要实现的接口,在Java中由接口或者抽象类实现。

   具体产品角色:工厂类所创建的对象就是此角色的实例,在java中由一个具体类实现。

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值