笼统工厂形式

定义

在工厂办法中,马厂只能出产马,鸭厂只能出产鸭。但显示日子中农场不仅能够养动物仍是养植物 因此笼统工厂形式就要考虑多等级产品的出产

要使用笼统工厂需要满足以下条件:

  • 有多个产品族,每个详细工厂创立同一个族但不同等级的产品
  • 本家产品能够一同使用

形式结构和完成

结构

  • 笼统工厂:提供多个产品的接口,包括多个产品的创造办法,能够创立多个不同等级的产品
  • 详细工厂:完成笼统工厂的多个笼统办法,完成详细产品的创立
  • 笼统产品
  • 详细产品

设计模式:抽象工厂模式

完成

package AbstractFactory;
/**
 * @author richard
 * @date 2021年11月23日 15:48:00
 * @description TODO
 */
public class FarmTest {
    public static void main(String[] args) {
        Farm sh=new SHFarm();
        Duck duck= (Duck) sh.newAnimal();
        duck.shout();
        Fruit tomoto= (Fruit) sh.newPlant();
        tomoto.show();
    }
}
    /**
     * 笼统产品:动物类
     */
    interface Animal{
        public void shout();
    }
    /**
     * 笼统产品:植物类
     */
    interface Plant{
        public  void show();
    }
    /**
     * 详细产品:马
     */
    class Horse implements Animal {
        @Override
        public void shout() {
            System.out.println("马叫ing");
        }
    }
    /**
     * 详细产品:鸭
     */
    class Duck implements Animal {
        @Override
        public void shout() {
            System.out.println("小鸭叫ing");
        }
    }
    /**
     * 详细产品:水果
     */
    class Fruit implements Plant{
        @Override
        public void show() {
            System.out.println("水果长大了");
        }
    }
    /**
     * 详细产品:蔬菜
     */
    class Vegetable implements Plant{
        @Override
        public void show() {
            System.out.println("蔬菜能够吃了");
        }
    }
    /**
     * 笼统工厂
     */
    interface Farm{
        public  Animal newAnimal();
        public  Plant newPlant();
    }
/**
 * 详细工厂:上海农场
 */
class SHFarm implements Farm {
    @Override
    public Animal newAnimal() {
        System.out.println("小鸭出世");
        return new Duck();
    }
    @Override
    public Plant newPlant() {
        System.out.println("水果能够吃了");
        return new Fruit();
    }
}
/**
 * 详细工厂:内蒙古农场
 */
class NMGFarm implements Farm{
    @Override
    public Animal newAnimal() {
        System.out.println("马出世");
        return new Horse();
    }
    @Override
    public Plant newPlant() {
        System.out.println("蔬菜能够吃了");
        return new Vegetable();
    }
}