美文网首页
设计模式(抽象工厂模式)

设计模式(抽象工厂模式)

作者: 黑客和白帽子的故事 | 来源:发表于2018-03-09 15:41 被阅读0次

    简介:

    (1)多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。

    (2)一个抽象工厂类,可以派生出多个具体工厂类。

    (3)并且每个具体工厂类可以创建多个具体产品类的实例。

    概念:
    抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。比如宝马320系列使用空调型号A和发动机型号A,而宝马230系列使用空调型号B和发动机型号B,那么使用抽象工厂模式,在为320系列生产相关配件时,就无需制定配件的型号,它会自动根据车型生产对应的配件型号A。

    一般来说,抽象工厂最简单形态也至少有4个元素:
    客户端(client)
    工厂(factory)
    产品A(product A)
    产品B(product B)

    产品类:

    //发动机和信号
    public interface Engine {
    }
    
    //发动机A
    public class EngineA implements Engine {
        public EngineA(){
            System.out.println("制造-->EngineA");
        }
    }
    
    //发动机B
    public class EngineB implements Engine {
        public EngineB(){
            System.out.println("制造-->EngineB");
        }
    }
    
    //空调
    public interface Aircondition {
    }
    
    
    //空调A
    public class AirconditionA implements Aircondition {
        public AirconditionA(){
            System.out.println("制造-->AirconditionA");
        }
    }
    
    //空调B
    public class AirconditionB implements Aircondition {
        public AirconditionB(){
            System.out.println("制造-->AirconditionB");
        }
    }
    

    创建工厂类:

    //创建工厂的接口
    public interface AbstractFactory {
        //制造发动机
        public Engine createEngine();
        //制造空调
        public Aircondition createAircondition();
        
    }
    
    //为宝马320系列生产配件
    public class FactoryBMW320  implements AbstractFactory{
        @Override
        public Engine createEngine() {
            return new EngineA();
        }
    
        @Override
        public Aircondition createAircondition() {
            return new AirconditionA();
        }
    }
    
    //宝马520创建零件
    public class FactoryBMW520 implements AbstractFactory {
        @Override
        public Engine createEngine() {
            return new EngineB();
        }
    
        @Override
        public Aircondition createAircondition() {
            return new AirconditionB();
        }
    }
    

    客户类:

    public class Customer {
    
        public static void main(String[] args) {
            //生产宝马320系列配件
            FactoryBMW320 factoryBMW320 = new FactoryBMW320();
            factoryBMW320.createEngine();
            factoryBMW320.createAircondition();
    
    
            //生产宝马520系列配件
            FactoryBMW520 factoryBMW520 = new FactoryBMW520();
            factoryBMW520.createEngine();
            factoryBMW520.createAircondition();
        }
    }
    

    ps:
    文章 参考地址:http://blog.csdn.net/jason0539/article/details/44976775

    相关文章

      网友评论

          本文标题:设计模式(抽象工厂模式)

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