设计模式之工厂模式FactoryPattern(二)

一、简单工厂

package com.xu.demo.factoryPattern;

/**
 * 简单工厂模式类
 */
public class SimpleFactoryPattern {

    public static Phone create(String name) {
        //根据输入对象名称判断返回相匹配的对象
        if("IPhone".equals(name)) {
            //返回对象
            return new IPhone();
        }else if("MiPhone".equals(name)) {
            return new MiPhone();
        }
        return null;
    }


    public static void main(String[] args) {
        Phone phone = SimpleFactoryPattern.create("IPhone");
        phone.call();

        Phone phone2 = SimpleFactoryPattern.create("MiPhone");
        phone2.call();
    }
}


二、普通工厂

1、Phone接口

package com.xu.demo.factoryPattern;

/**
 * 抽象电话的接口
 */
public interface Phone {
    /**
     * 抽象的打电话的功能,有不同的实现类做具体的实现
     */
    void call();
}

2、PhoneFactory接口

package com.xu.demo.factoryPattern;

public interface PhoneFactory {

    /**
     * 抽象的创建方法
     * @return
     */
    Phone create();
}

 3、IPhone类

package com.xu.demo.factoryPattern;

public class IPhone implements Phone{

    @Override
    public void call() {
        System.out.println("我在使用IPhone给你打电话!");
    }
}

 4、MiPhone类

package com.xu.demo.factoryPattern;

public class MiPhone implements Phone{

    @Override
    public void call() {
        System.out.println("我在使用小米手机给你打电话!");
    }
}

5、IPhoneFactory类

package com.xu.demo.factoryPattern;

/**
 * 苹果手机工厂
 */
public class IPhoneFactory implements PhoneFactory {

    @Override
    public Phone create() {
        return new IPhone();
    }
}

6、MiPhoneFactory类

package com.xu.demo.factoryPattern;

/**
 * 小米手机工厂
 */
public class MiPhoneFactory implements PhoneFactory {

    @Override
    public Phone create() {
        return new MiPhone();
    }
}

7、FactoryPattern类

三、超级工厂 

package com.xu.demo.factoryPattern;

import java.lang.reflect.InvocationTargetException;

/***
 *
 * 超级工厂(简单工厂 + 反射 + 泛型),利用反射机制解决开闭原则的问题
 */
public class SuperFactory {

    public static void main(String[] args) {
        //com.lx.dom.impl.pro这一段是包名,IPhone是类名,不能输错
        Phone phone = SuperFactory.create("com.xu.demo.factoryPattern.MiPhone") ;
        phone.call();
    }


    /**
     * 根据完整类型名动态加载class并创建实例
     * @param className
     * @return
     */
    @SuppressWarnings("unchecked")
    public static <T> T create(String className) {

        try {
            //动态加载class
            Class<?> clazz = Class.forName(className);

            //通过calss对象获取构造函数创建新实例
            return (T) clazz.getConstructor().newInstance();
        } catch (Exception e) {

            //异地重抛
            throw new RuntimeException("Create instance fail.",e);
        }
    }

}

运行结果: 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

易雪寒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值