设计模式之工厂方法模式

工厂模式是一种创建型设计模式。定义一个用与创建对象的接口,让子类实现决定创建哪一个类,使类的实例化延迟到它的子类。工厂模式的模型角色:

  • 1.抽象工厂:模式核心,所有具体工厂都要实现这个接口。包含创建同种类别产品的方法
  • 2.具体工厂:实现抽象工厂,根据具体需要创建具体产品对象。
  • 3.抽象产品:定义产品的共性。
  • 4.具体产品:具体的产品,拥有所有产品的共性,也拥有自己的特性。

以去饮料店买的饮料作为例子,抽象一个饮料工厂,包含生成饮料的方法:

public interface DrinksFactory {

   public Drinks build();
}

抽象产品:

public abstract class Drinks {
    public String doSing() {
        return "水, " + "糖, ";
    }

    public abstract String otherDoSing();

    public void make() {
        Log.d("制作配方", doSing() + otherDoSing());
    }
}

所有的饮料都包含水,糖,是共性;又拥有独特的配料,是为特性。

具体产品:

public class AppleDrinks extends Drinks {

    @Override
    public String otherDoSing() {
        return "苹果汁";
    }
}

public class LemonDrinks extends Drinks{
    @Override
    public String otherDoSing() {
        return "柠檬汁";
    }
}

具体工厂:

public class AppleFactory implements DrinksFactory {
    @Override
    public Drinks build() {
        return new AppleDrinks();
    }
}

public class LemonFactory implements DrinksFactory {
    @Override
    public Drinks build() {
        return new LemonDrinks();
    }
}

使用:

 DrinksFactory factory = new AppleFactory();
 Drinks drinks = factory.build();

 DrinksFactory factory2 = new LemonFactory();
 Drinks drinks2 = factory2.build();
 drinks.make();
 drinks2.make();

结果:

 D/制作配方: 水, 糖, 苹果汁
 D/制作配方: 水, 糖, 柠檬汁

工厂模式特点:

  • 优点:结构清晰,良好的封装性。创建对象不需要知道对象的具体,只需要知道对应的工厂即可。甚至还可以将创建对象修改为使用反射创建,封装性更加良好;可拓展性强。需要增加产品时增加相应的工厂就可以满足需求;解耦。高层模块只需要知道产品的抽象类,它的具体类都不用关心。
  • 缺点:创建产品数量的增多可能会导致工厂类增多,增加代码量,加深代码复杂度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值