设计模式-工厂设计模式

简单工厂设计模式

简介

创建一个工厂类,根据传入参数值的不同,返回不同的实例。被创建的实例具有相同的父类或接口。
适用场景:
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";
    }
}

你可能感兴趣的:(设计模式-工厂设计模式)