抽象工厂

简单工厂用于生产同一类产品,即生产实现了同一个接口的类的对象(或者实现了同一个抽象类的类的对象),而抽象工厂用于生产一批产品。

对于抽象工厂,举个例子:厨房中有碗、灶台、和油烟机,抽象工厂可以根据需要同时生产所需规格的这三个对象,例如如果我们需要一个简单的厨房就可以让工厂生产“塑料碗”、“土灶台”、“烟囱”的农村简单厨房,如果我们需要的是城市使用的高端厨房就可以让工厂生产“陶瓷碗”、“燃气灶”、“电抽油烟机”。

对于简单工厂,可以根据需要生产“塑料碗”、“陶瓷碗”、“铁碗”,但是无法无法一下子生产碗、灶台、烟囱。

实现抽象工厂需要实现以下几点:

  1. 一个抽象的工厂类,该工厂类有多个抽象的方法,每个抽象方法用于生产不同的产品。
  2. 继承了抽象工厂类的具体抽象类,该类用于产生需要的一系列产品。
  3. 多个接口,所有需要被生产的类都实现该接口,例如碗一个接口,灶台一个接口,油烟机一个接口。
  4. 需要被生产的类。


抽象工厂类:

package pattern;


/*抽象厨房工厂*/
public abstract class AbstractkitchenFactory {

    public abstract Bowl createBowl();

    public abstract CookerHood crateCookerHook();

    public abstract Hearth createHearth();
}

高端厨房工厂类:

package pattern;

/*
* 高端厨房工厂
* */
public class HighKitchenFactory extends AbstractkitchenFactory {
    @Override
    public Bowl createBowl() {
        return new CeramicBowl();
    }

    @Override
    public CookerHood crateCookerHook() {
        return new LampblackMachine();
    }

    @Override
    public Hearth createHearth() {
        return new GasHearth();
    }
}

低端厨房工厂类:

package pattern;


/*
* 低端厨房工厂
* */
public class LowerKitchenFactory extends AbstractkitchenFactory {
    @Override
    public Bowl createBowl() {
        return new PlasticBowl();
    }

    @Override
    public CookerHood crateCookerHook() {
        return new Chimney();
    }

    @Override
    public Hearth createHearth() {
        return new SoilHearth();
    }
}


碗抽象类:

package pattern;


/*
* 碗抽象类
* */
public abstract class Bowl {
    public abstract void describe();
}

油烟机抽象类:

package pattern;

/*
*油烟机抽象类
* */
public abstract class CookerHood {
    public abstract void describe();
}

灶台抽象类:

package pattern;


/*
* 灶台
* */
public abstract class Hearth {
    public abstract void describe();
}

塑料碗:

package pattern;


/*
* 塑料工厂
* */
public class PlasticBowl extends Bowl  {
    @Override
    public void describe() {
        System.out.println("我是塑料碗");
    }
}

陶瓷碗:

package pattern;

/*
* 陶瓷碗
* */
public class CeramicBowl extends Bowl {
    @Override
    public void describe() {
        System.out.println("我是陶瓷碗");
    }
}

土烟囱:

package pattern;

/*
* 烟囱
* */
public class Chimney extends CookerHood {
    @Override
    public void describe() {
        System.out.println("我是土烟囱。。。。。");
    }
}

抽油烟机:

package pattern;

/*
* 油烟机
* */
public class LampblackMachine extends CookerHood {
    @Override
    public void describe() {
        System.out.println("我是油烟机");
    }
}

土灶台:

package pattern;


/*
* 土灶台
* */
public class SoilHearth extends Hearth {

    @Override
    public void describe() {
        System.out.println("我是土灶台");
    }
}

燃气灶:

package pattern;


/*
*
* 天然气灶台*/
public class GasHearth extends Hearth {
    @Override
    public void describe() {
        System.out.println("我是天然气灶台");
    }
}

主类:

package pattern;


/**
 * Created by Administrator on 2018/7/14.
 */
public class Main {
    public static void main(String argc[]){
//        AbstractkitchenFactory abstractkitchenFactory=new HighKitchenFactory();
        AbstractkitchenFactory abstractkitchenFactory=new LowerKitchenFactory();
        abstractkitchenFactory.createBowl().describe();
        abstractkitchenFactory.createHearth().describe();
        abstractkitchenFactory.crateCookerHook().describe();
    }
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值