美文网首页
设计模式-工厂设计模式

设计模式-工厂设计模式

作者: 秋元_92a3 | 来源:发表于2020-03-02 21:15 被阅读0次

    简单工厂设计模式

    简介

    创建一个工厂类,根据传入参数值的不同,返回不同的实例。被创建的实例具有相同的父类或接口。
    适用场景:
    1、需要创建的对象比较少;简单工厂模式的if else分支不宜过多。
    2、客户端不关系对象的创建过程
    软件设计的开闭原则:对扩展开放;对修改关闭。当系统的业务逻辑发生改变的时候,通过扩展实现业务逻辑的变化,而不是通过修改来实现业务逻辑的变化。

    示例代码

    @Slf4j
    public class SimplePhoneFactory {
    
        public static Phone createPhone(int i) {
            switch (i) {
                case 0:
                    return new IPone();
                case 1:
                    return new Mate();
                default:
                    return new MI();
            }
        }
    
        public static void main(String[] args) {
            final Phone phone = createPhone(0);
            log.info("创建工厂实例:{}", phone.getName());
        }
    }
    

    工厂设计模式

    简介

    定义一个用于创建对象的接口,让子类决定实例化哪一个类。
    每个抽象产品派生出多个具体产品,每个抽象工厂派生出多个具体工厂。每个具体工厂负责一个具体产品实例的创建。

    示例代码

    /**
     * @author drebander
     * @since 2020-03-02
     */
    public interface PhoneFactory {
        /**
         * phone实例化
         * @return phone
         */
        Phone createPhone();
    }
    
    /**
     * 华为手机实例化工厂
     * @author drebander
     * @since 2020-03-02
     */
    public class HuaWeiPhoneFactory implements PhoneFactory {
    
        @Override
        public Phone createPhone() {
            return new Mate();
        }
    }
    
    
    @Slf4j
    public class FactoryTest {
        public static void main(String[] args) {
            PhoneFactory factory = new HuaWeiPhoneFacroty();
            final Phone phone = factory.createPhone();
            log.info("工厂设计模式实例化对象:{}", phone.getName());
        }
    }
    

    抽象工厂设计模式

    简介

    抽象工程模式:每个抽象产品派生出多个具体产品类,每个抽象工厂派生多个具体工厂类。每个具体工厂类负责一系列具体产品的实例创建。

    示例代码

    @Slf4j
    public class FactoryTest {
        public static void main(String[] args) {
            InternetFactory appleFactory = new AppleFactory();
            final Computer computer = appleFactory.createComputer();
            final Phone phone = appleFactory.createPhone();
            log.info("抽象工厂模式实例化-电脑:{},手机:{}", computer.getName(), phone.getName());
        }
    }
    /**
     * @author drebander
     * @since 2020-03-02ß
     */
    public class AppleFactory implements InternetFactory {
        @Override
        public Phone createPhone() {
            return new IPone();
        }
    
        @Override
        public Computer createComputer() {
            return new Mac();
        }
    }
    
    public interface InternetFactory {
    
        Phone createPhone();
    
        Computer createComputer();
    }
    

    附录-实体对象代码

    public interface Phone {
        String getName();
    }
    public class IPone implements Phone {
        @Override
        public String getName() {
            return "iPhone";
        }
    }
    public class Mate implements Phone {
        @Override
        public String getName() {
            return "Mate";
        }
    }
    public class MI implements Phone {
        @Override
        public String getName() {
            return "MI";
        }
    }
    public interface Computer {
        String getName();
    }
    public class Mac implements Computer {
        @Override
        public String getName() {
            return "Mac";
        }
    }
    

    相关文章

      网友评论

          本文标题:设计模式-工厂设计模式

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