zoukankan      html  css  js  c++  java
  • 工厂模式

    定义:

      创建产品,根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式;

      根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式。

      该模式用于封装和管理对象的创建,是一种创建型模式。

    1简单工厂

    示例,参考:https://www.cnblogs.com/yssjun/p/11102162.html

    Phone类:手机标准规范类(AbstractProduct)
    
    public interface Phone {
        void make();
    }
      MiPhone类:制造小米手机(Product1)
    
    
    public class MiPhone implements Phone {
        public MiPhone() {
            this.make();
        }
        @Override
        public void make() {
            // TODO Auto-generated method stub
            System.out.println("make xiaomi phone!");
        }
    }
    
    IPhone类:制造苹果手机(Product2)
    
    public class IPhone implements Phone {
        public IPhone() {
            this.make();
        }
        @Override
        public void make() {
            // TODO Auto-generated method stub
            System.out.println("make iphone!");
        }
    }
    
    PhoneFactory类:手机代工厂(Factory)
    
    
    public class PhoneFactory {
        public Phone makePhone(String phoneType) {
            if(phoneType.equalsIgnoreCase("MiPhone")){
                return new MiPhone();
            }
            else if(phoneType.equalsIgnoreCase("iPhone")) {
                return new IPhone();
            }
            return null;
        }
    }

    2工厂方法

      在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建工作交给子类去做。这个核心类仅仅负责给出具体工厂必须实现的接口,而不负责产品类被实例化这种细节,这使得工厂方法模式可以允许系统在不修改工厂角色的情况下引进新产品。


    AbstractFactory类:生产不同产品的工厂的抽象类
    
    public interface AbstractFactory {
        Phone makePhone();
    }
    XiaoMiFactory类:生产小米手机的工厂(ConcreteFactory1)
    
    public class XiaoMiFactory implements AbstractFactory{
        @Override
        public Phone makePhone() {
            return new MiPhone();
        }
    }
    AppleFactory类:生产苹果手机的工厂(ConcreteFactory2)
    
    public class AppleFactory implements AbstractFactory {
        @Override
        public Phone makePhone() {
            return new IPhone();
        }
    }

    上面两种模式不管工厂怎么拆分抽象,都只是针对一类产品Phone

    3抽象工厂

      提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。

       在工厂方法模式中,一个具体的工厂负责生产一类具体的产品,即一对一的关系,但是,如果需要一个具体的工厂生产多种产品对象,那么就需要用到抽象工厂模式了。

      抽象工厂模式通过在AbstarctFactory中增加创建产品的接口,并在具体子工厂中实现新加产品的创建,当然前提是子工厂支持生产该产品。

    PC类:定义PC产品的接口(AbstractPC)
    
    public interface PC {
        void make();
    }
    MiPC类:定义小米电脑产品(MIPC)
    
    
    public class MiPC implements PC {
        public MiPC() {
            this.make();
        }
        @Override
        public void make() {
            // TODO Auto-generated method stub
            System.out.println("make xiaomi PC!");
        }
    }
    
    MAC类:定义苹果电脑产品(MAC)
    
    public class MAC implements PC {
        public MAC() {
            this.make();
        }
        @Override
        public void make() {
            // TODO Auto-generated method stub
            System.out.println("make MAC!");
        }
    }
    
    下面需要修改工厂相关的类的定义:
    
    AbstractFactory类:增加PC产品制造接口
    
    public interface AbstractFactory {
        Phone makePhone();
        PC makePC();
    }
    XiaoMiFactory类:增加小米PC的制造(ConcreteFactory1)
    
    
    public class XiaoMiFactory implements AbstractFactory{
        @Override
        public Phone makePhone() {
            return new MiPhone();
        }
        @Override
        public PC makePC() {
            return new MiPC();
        }
    }
    
    AppleFactory类:增加苹果PC的制造(ConcreteFactory2)
    
    
    public class AppleFactory implements AbstractFactory {
        @Override
        public Phone makePhone() {
            return new IPhone();
        }
        @Override
        public PC makePC() {
            return new MAC();
        }
    }
    总结一下工厂方法模式和抽象工厂模式的核心区别
    • 工厂方法模式利用继承,抽象工厂模式利用组合
    • 工厂方法模式产生一个产品对象,抽象工厂模式产生一个产品族对象
    • 工厂方法模式利用子类创造对象,抽象工厂模式利用接口的实现创造对象


    参考链接:https://www.jianshu.com/p/70f7fd47f2e2

  • 相关阅读:
    复利计算单元测试-软件工程
    实验一 操作系统
    <构建之法>前三章读后感—软件工程
    复利计算总结-软件工程
    实验0-操作系统
    复利计算1.0~2.0~3.0~4.0-软件工程(网页版)
    典型用户与场景
    0608场景(用户故事) 任务
    构建之法读后感+学习和诚信
    0603团队变化+sprint第二个冲刺
  • 原文地址:https://www.cnblogs.com/personsiglewine/p/13024188.html
Copyright © 2011-2022 走看看