工厂模式

工厂模式介绍

工厂模式为创建型设计模式,实现方式为定义一个创建对象的接口或者抽象类,让子类工厂决定实例化哪一个类。使一个类的创建延迟到其子类工厂。工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类

工厂模式中的角色

工厂方法模式中的4个角色:

抽象工厂角色(Creator):担任这个角色的时工厂方法模式的核心,任何在模式中创建对象的工厂类必须实现该接口。

具体工厂角色(Concrete Creator):担任这个角色的时实现了抽象工厂接口的具体类,具体工厂角色含有与应用相关的逻辑,并且受到应用程序的调用以创建产品对象。

抽象产品角色(Product):产品对象的共同父类或共同拥有的接口。

具体产品角色(Concrete Product):实现了抽象产品角色所声明的接口。工厂方法模式所创建的每一个对象都是某个具体产品角色的实例。

工厂模式代码示例

使用饮料和生产饮料的工厂举例

//饮料种类接口
public interface Drinks {

}

Coca和Pepsi品牌的两种饮料 

//Coca品牌的Apple类型饮料
public class CocaAppleDrinks implements Drinks {
    //do something
}
//Coca品牌的Orange类型饮料
public class CocaOrangeDrinks implements Drinks {
    //do something
}
//Pepsi品牌Apple类型饮料
public class PepsiAppleDrinks implements Drinks {
    //do something
}
//Pepsi品牌Orange类型饮料
public class PepsiOrangeDrinks implements Drinks {
    //do something
}

工厂接口

public interface DrinkFactory {
    abstract Drinks createDrink(String drinksType);
}

实现工厂接口的两种品牌的工厂

//Coca工厂
public class Coca implements DrinkFactory{

    @Override
    public Drinks createDrink(String drinksType) {
        if (drinksType.equals("appleDrink")){
            return new CocaAppleDrinks();
        }else if(drinksType.equals("orangeDrink")){
            return new CocaOrangeDrinks();
        }
        return null;
    }
}
//pepsi工厂
public class Pepsi implements DrinkFactory{
    @Override
    public Drinks createDrink(String drinksType) {
        if (drinksType.equals("appleDrinks")){
            return new PepsiAppleDrinks();
        }else if (drinksType.equals("orangeDrinks")){
            return new PepsiOrangeDrinks();
        }
        return null;
    }
}

工厂方法的使用

public static void main(String[] args) {
        DrinkFactory drinkFactory=null;
        String factoryType=null;
        String drinksType=null;
        if (factoryType.equals("coca")){
            drinkFactory=new Coca();
        }else if (factoryType.equals("pepsi")){
            drinkFactory=new Pepsi();
        }
       Drinks drinks=drinkFactory.createDrink(drinksType);

    }

 工厂模式优缺点

优点:当出现新的产品时,而不需改动核心类。

缺点:当出现多种产品族的时候,需要新建工厂接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值