工厂模式

java工厂模式分为三种:简单工厂、工厂方法、抽象工厂

简单工厂:
又叫静态工厂,是工厂模式三中状态中结构最为简单的。主要有一个静态方法,用来接受参数,并根据参数 来决定返回实现同一接口的不同类的实例。

    public static  xxxx  factory(String  name){
        switch(name):
            case apple:
                //创建apple这个类
            case orange:
                //创建orange这个类
            ......
    }

工厂方法
在简单工厂中,感觉这个工厂类管理太多的类,负荷太大,如果出错的话,就会出现整个工厂都不不能够使用,因此,在简单工厂的基础上,产生出了工厂方法。
工厂方法和简单工厂的主要区别是:简单工厂是把创建产品的职能都放在一个类里面,而工厂方法则把不同的产品放在实现了工厂接口的不同工厂类里面,这样就算其中一个工厂类出了问题,其他工厂类也能正常工作,互相不受影响,以后增加新产品,也只需要新增一个实现工厂接口工厂类,就能达到,不用修改已有的代码。

//创建一个movable接口
public interface Moveable{
    public void run();
}
//创建两个实现接口的类
public class Car implements Moveable{
    public void run(){
        System.out.println("car......");
    }
}

public class Tank implements Moveable{
    public void run(){
        System.out.println("tank......");
    }
}
//创建工厂接口
public interface Factory{
    public Moveable factory();
}
//创建生产tank的工厂
public class TankFactory implements Factory{
    public Moveable factory(){
        return new Tank();
    }
}
//创建生产car的工厂
public class CarFactory implements Factory{
    public Moveable factory(){
        return new Car();
    }
}
在上边的代码中,主要是将生产的过程给分离出来,不会使得咋一个类中,产生所有的产品。

抽象工厂
抽象工厂与工厂方法的区别:工厂方法产生的是一个产品,而抽象方法产生的是一个产品族(产品组合)

public interface Factory{
    public Weapon createWeapon();
    public Vehicle createVehicle();
    public Food createFood();
}
//创建三个接口Weapon、Vehicle、Food
public interface Weapon{
    public void shoot();
}

public interface Vehicle{
    public void run();
}

public interface Food{
    public void eat();
}
//实现三个接口
public class AK47 implements Weapon{
    public void shoot(){
        System.out.prinln("ak47.....");
    }
}

public class Car implements Vehicle{
    public void run(){
        System.out.prinln("car.....");
    }
}

public class Apple implements food{
    public void eat(){
        System.out.prinln("apple.....");
    }
}

现在将产品进行组合形成一个新的产品系列

//在现实生活中
public class DefaultFactory implements Factory{
    public Weapon createWeapon(){
        return new AK47();
    }
    public Vehicle createVehicle(){
        return new Car();
    }
    public Food createFood(){
        return new Apple();
    }
}

这是第一次写博客,感觉自己写博客和看别人的博客完全是不同的体验,没有经验,希望大家多多指教。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值