抽象工厂模式

作者: 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