抽象工厂模式

作者: Stephenwish | 来源:发表于2020-07-23 19:15 被阅读0次

抽象工厂和普通工厂区别,首先看下面代码场景

public class Client {
    public static void main(String[] args) {
      //假想下一个现代人开着一辆车(交通工具),拿着一把枪(武器),吃着面包
        Car car = new Car();
        Gun gun = new Gun();
        Bread bread = new Bread();
    }
}

\color{green}\bigstar 如果场景换成魔法世界的人呢

public class Client {
    public static void main(String[] args) {
      //假想下一个魔法人骑着扫帚(交通工具),拿着魔棒(武器),吃着蘑菇
        Broom broom= new Broom();
        MagicStick magicStick = new MagicStick ();
        Mushroom mushroom= new Mushroom ();
    }
}

\color{green}\bigstar 再换成古代人呢

public class Client {
    public static void main(String[] args) {
      //假想下一个魔法人骑着马(交通工具),拿着剑,吃着肉
        Horse horse= new Horse();
        Sword sword= new Sword ();
        Meat meat= new meat ();
    }
}

\color{red}\bigstar 看出来了么?main方法里面根据不同的场景有不同的场景对象组(车,枪,面包一组),这时候用抽象工厂改造一下

第一步创建产品的抽象类
//下面自行创建3个抽象类
public abstract class Food {
    public abstract void getName();
}

public abstract class Vehicle {
    public abstract void getName();
}

public abstract class Weapon {
    public abstract void getName();
}
第二步创建产品的实现类
public class Car extends  Vehicle{
    @Override
    public void getName() {
        System.err.println("我是汽车");
    }
}

public class Gun extends Weapon{
    @Override
    public void getName() {
        System.err.println("我是枪");
    }
}

public class Bread extends  Food{
    @Override
    public void getName() {
        System.err.println("我是面包");
    }
}

\color{red}\spadesuit其他组(马,剑,肉)(扫帚,魔法棒,蘑菇)自行创建

第三步创建一个对象,没错就是具体的场景工厂(理解为小工厂)把具体产品包裹起来
public class ModernFactory  {

   
    public Vehicle VEHICLE() {
        return new Car();
    }


    public Food createFood() {
        return new Bread();
    }


    public Weapon createWeapon() {
        return new Gun();
    }
}

\color{red}\spadesuit其他组小工厂(马,剑,肉)(扫帚,魔法棒,蘑菇)自行创建

第四步再创建一个对象,也就是创建小工厂的工厂,把小工厂理解为产品,让上面的3个具体工厂都是大工厂的多态化
public interface MyFactory {
        Vehicle VEHICLE();
        Food createFood();
        Weapon createWeapon();
}

//小工厂改造为如下,多了公共实现类
public class ModernFactory implements  MyFactory {

    @Override
    public Vehicle VEHICLE() {
        return new Car();
    }

    @Override
    public Food createFood() {
        return new Bread();
    }

    @Override
    public Weapon createWeapon() {
        return new Gun();
    }
}


\bigstar总结:工厂模式是一个工厂类生产多个具体产品类(产品>工厂);
抽象工厂是:工厂类产生多个具体小工厂,而小工厂里面实现多个具体产品组合(产品>小工厂>工厂)

相关文章

网友评论

    本文标题:抽象工厂模式

    本文链接:https://www.haomeiwen.com/subject/gynhlktx.html