美文网首页程序员
工厂模式及抽象工厂模式简介

工厂模式及抽象工厂模式简介

作者: eb6684925911 | 来源:发表于2018-08-21 19:25 被阅读19次

    本文介绍了工厂模式,抽象工厂模式并附有java代码实现demo。内容仅供参考使用,有不足之处请及时指出,也欢迎大家交流探讨。

    工厂模式

    工厂模式是创建型模式的一种,工厂模式是对产品的抽象。

    场景

    假设你下订单到厂家买灯泡,这时厂家会根据你的需求制作对应的灯泡。但是你并不关心灯泡是这么制作的,你只要拿到自己所需的灯泡就满足了。这种场景可以用工厂设计模式。

    示例

    创建一个灯接口,有发光方法。

    public interface Lamp {
    
        void shine();
    }
    

    灯有对应的发光颜色,这里创建大中小三种型号的灯实例。

    public class BigLamp implements Lamp{
    
        @Override
        public void shine() {
            System.out.println("我是一个大灯!");
        }
    }
    
    public class MiddleLamp implements Lamp {
    
        @Override
        public void shine() {
            System.out.println("我是一个中灯!");
        }
    }
    
    public class LittleLamp implements Lamp {
    
        @Override
        public void shine() {
            System.out.println("我是一个小灯!");
        }
    }
    

    创建一个灯工厂,用来根据需要生产灯实例。

    public class LampFactory {
    
        public static Lamp makeLamp(String size) {
    
            if ("big".equals(size)) {
                return new BigLamp();
            }
    
            if ("middle".equals(size)) {
                return new MiddleLamp();
            }
    
            return new LittleLamp();
        }
    }
    

    下一个大灯订单,工厂会根据你的需要制作一个大灯。

    Lamp lamp = LampFactory.makeLamp("big");
    lamp.shine();
    

    输出

    我是一个大灯!
    

    抽象工厂模式

    抽象工厂模式是创建型模式的一种,抽象工厂模式是对产品族的抽象。

    场景

    你下了订单买了灯之后,发现缺少适合的灯座,这时,你需要下订单买一个与之匹配的灯座,灯与灯座之间是有关联关系的,大灯配大灯座,中灯配中灯座,小灯配小灯座,这里如果接的用工厂模式创建一个灯座工厂,会出现一个问题,那就是灯,和灯座是分别下订单买的,有可能买回来,发现并不匹配。这种场景就可以用抽象工厂模式来解决这个问题。

    示例

    灯接口及对应的大中小三种型号的灯实例。

    public interface Lamp {
    
        void shine();
    }
    
    public class BigLamp implements Lamp{
    
        @Override
        public void shine() {
            System.out.println("我是一个大灯!");
        }
    }
    
     public class MiddleLamp implements Lamp {
    
        @Override
        public void shine() {
            System.out.println("我是一个中灯!");
        }
    }
    
    public class LittleLamp implements Lamp {
    
        @Override
        public void shine() {
            System.out.println("我是一个小灯!");
        }
    }
    

    灯座接口及对应的大中小三种型号的灯座实例。

    public interface LampHolder {
        
        void holdLamp();
    }
    
    public class BigLampHolder implements LampHolder {
        
        @Override
        public void holdLamp() {
            System.out.println("我是一个大灯座!");
        }
    }
    
    public class MiddleLampHolder implements LampHolder {
    
        @Override
        public void holdLamp() {
            System.out.println("我是一个中灯座!");
        }
    }
    
    public class LittleLampHolder implements LampHolder {
    
        @Override
        public void holdLamp() {
            System.out.println("我是一个小灯座!");
        }
    }
    

    创建抽象工厂接口,具有制作灯和灯座的方法。

    public interface AbstractFactory {
    
        Lamp makeLamp();
    
        LampHolder makeLampHolder();
    }
    

    创建大中小三种型号的抽象工厂实例。

    public class BigFactory implements AbstractFactory {
    
        @Override
        public Lamp makeLamp() {
            return new BigLamp();
        }
    
        @Override
        public LampHolder makeLampHolder() {
            return new BigLampHolder();
        }
    }
    
    public class MiddleFactory implements AbstractFactory {
    
        @Override
        public Lamp makeLamp() {
            return new MiddleLamp();
        }
    
        @Override
        public LampHolder makeLampHolder() {
            return new MiddleLampHolder();
        }
    }
    
    public class LittleFactory implements AbstractFactory {
    
        @Override
        public Lamp makeLamp() {
            return new LittleLamp();
        }
    
        @Override
        public LampHolder makeLampHolder() {
            return new LittleLampHolder();
        }
    }
    

    创建工厂生产者,用来创建对应型号的工厂。

    public class FactoryProducer {
    
        public static AbstractFactory prodecerFactory(String size) {
    
            if ("big".equals(size)) {
                return new BigFactory();
            }
    
            if ("middle".equals(size)) {
                return new MiddleFactory();
            }
    
            return new LittleFactory();
        }
    }
    

    下一个大型号订单,工厂会根据你的需要制作相应的灯,灯座。

    public class AbstractFactoryDemo {
    
        public static void main(String[] args) {
    
            AbstractFactory abstractFactory = FactoryProducer.prodecerFactory("big");
    
            Lamp lamp = abstractFactory.makeLamp();
            LampHolder lampHolder = abstractFactory.makeLampHolder();
    
            lamp.shine();
            lampHolder.holdLamp();
        }
    }
    

    输出

    我是一个大灯!
    我是一个大灯座!
    

    区别

    工厂模式是针对产品的抽象,抽象工厂模式是针对产品族的抽象。

    对比 灯产品 灯座产品
    大型号产品族 大灯 大灯座
    中型号产品族 中灯 中灯座
    小型号产品族 小灯 小灯座

    大灯,中灯,小灯是同一产品等级的产品,大灯和大灯座是不同产品等级的产品,大灯和大灯座组成一个产品族,产品族由不同产品等级的产品根据某些关系组成。

    相关文章

      网友评论

        本文标题:工厂模式及抽象工厂模式简介

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