文档章节

设计模式:工厂方法模式

大羌
 大羌
发布于 2017/09/09 22:20
字数 357
阅读 1
收藏 0

     工厂方法模式是new操作的替代品,以往的new 对象都交给factory(工厂)去解决,你只需要提出你的要求(class name);

例如:

 游戏中的东南亚版本;可能有新加坡,泰国,马拉西亚三个版本,但是他们客户端只有一个,登录操作方式和流程会有差异,这种情况下就可以使用工厂方法模式;

产品类:

public interface Country {
    public void connection();
}

新加坡:

public class Singepore implements  Country {
    @Override
    public void connection() {
        System.out.println("connect Singepore!");
    }
}

泰国:

public class Thailand implements  Country {
    @Override
    public void connection() {
        System.out.println("connect Thailand!");
    }
}

马来西亚:

public class Malaysia implements  Country {
    @Override
    public void connection() {
        System.out.println("connect Malaysia!");
    }
}

以上三个国家是产品类country 的实现;以前的创建方式是:Malaysia m=new Malaysia(); 现在就可以将new的操作交给factory 去实现;

建立工厂区:

public class CountryFactory  {
    public static <T extends Country> T createCountry(Class<T> c) {
        Country country = null;
        try {
            country = (Country) Class.forName(c.getName()).newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return (T) country;
    }
}

具体使用:

public class ConnectionCountry {
    public static void main(String[] args) {
        //connection Singepore
        Singepore singepore = CountryFactory.createCountry(Singepore.class);
        singepore.connection();
        //connection Thailand
        Thailand thailand  = CountryFactory.createCountry(Thailand.class);
        thailand.connection();
    }
}

总结:

 工厂方法模式主要的思想就是,将具有相同操作接口的类,类的创建不在使用new,而是统一的将此操作交给factory去实现,只需要将你需要的名字传递进去,工厂自然会给你想要的;

© 著作权归作者所有

共有 人打赏支持
大羌
粉丝 0
博文 30
码字总数 13488
作品 0
成都
程序员

暂无文章

同样是工作3年程序员,为什么别人每月25K你却只有15K?

你有没有静下心来思考过:同样是做了x年Java开发,为什么你的技术比别人差很多?为什么别人每月26K你却只有15K? 其实技术水平的高低和个人智商关系不大(毕竟能做Java编程开发大家都不会差)...

Java填坑之路
28分钟前
3
0
跨域问题:解决跨域的三种方案

当前端页面与后台运行在不同的服务器时,就必定会出现跨域这一问题,本篇简单介绍解决跨域的三种方案,部分代码截图如下,仅供参考: 方式一:使用ajax的jsonp 前端代码 服务器代码 使用该方...

rechardchensir
28分钟前
4
0
linux学习-1012

8.6 管道符和作业控制 8.7/8.8 shell变量 8.9 环境变量配置文件 扩展 bashrc和bash_profile的区别 http://ask.apelearn.com/question/7719 简易审计系统: http://www.68idc.cn/help/server/...

wxy丶
29分钟前
1
0
springboot dubbo 在程序初始化完成前 使用回声测试对服务依赖检测

<dubbo:consumer timeout="10000" check="false" /><dubbo:service delay="-1" /> @Component@Order(2)public class PrkServiceInit implements ApplicationListener {private Logge......

林伟琨
31分钟前
3
0
“网红架构师”解决你的Ceph 运维难题

Q1. 环境预准备 绝大多数MON创建的失败都是由于防火墙没有关导致的,亦或是SeLinux没关闭导致的。一定一定一定要关闭每个每个每个节点的防火墙(执行一次就好,没安装报错就忽视): CentOS s...

编程SHA
35分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部