文档章节

设计模式:工厂方法模式

大羌
 大羌
发布于 2017/09/09 22:20
字数 357
阅读 1
收藏 0
点赞 0
评论 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
博文 29
码字总数 13024
作品 0
成都
程序员

暂无相关文章

ThreadPoolExecutor

ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ......

4rnold ⋅ 昨天 ⋅ 0

Java正无穷大、负无穷大以及NaN

问题来源:用Java代码写了一个计算公式,包含除法和对数和取反,在页面上出现了-infinity,不知道这是什么问题,网上找答案才明白意思是负的无穷大。 思考:为什么会出现这种情况呢?这是哪里...

young_chen ⋅ 昨天 ⋅ 0

前台对中文编码,后台解码

前台:encodeURI(sbzt) 后台:String param = URLDecoder.decode(sbzt,"UTF-8");

west_coast ⋅ 昨天 ⋅ 0

实验楼—MySQL基础课程-挑战3实验报告

按照文档要求创建数据库 sudo sercice mysql startwget http://labfile.oss.aliyuncs.com/courses/9/createdb2.sqlvim /home/shiyanlou/createdb2.sql#查看下数据库代码 代码创建了grade......

zhangjin7 ⋅ 昨天 ⋅ 0

VS2015配置并运行汇编(一步一步照图做)【vs2017的链接在最后】

x64: TITLE Add and Subtract (AddSub.asm) ; This program adds and subtracts 32-bit integers. ; Last update: 2/1/02 ;.MODEL flat,stdcall x64 not su......

simpower ⋅ 昨天 ⋅ 0

一起读书《深入浅出nodejs》-node模块机制

node 模块机制 前言 说到node,就不免得提到JavaScript。JavaScript自诞生以来,经历了工具类库、组件库、前端框架、前端应用的变迁。通过无数开发人员的努力,JavaScript不断被类聚和抽象,...

小草先森 ⋅ 昨天 ⋅ 0

Java桌球小游戏

其实算不上一个游戏,就是两张图片,不停的重画,改变ball图片的位置。一个左右直线碰撞的,一个有角度碰撞的。 左右直线碰撞 package com.bjsxt.test;import javax.swing.*;import j...

森林之下 ⋅ 昨天 ⋅ 0

你真的明白RPC 吗?一起来探究 RPC 的实质

你真的明白RPC 吗?一起来探究 RPC 的实质 不论你是科班出身还是半路转行,这么优秀的你一定上过小学语文,那么对扩句和缩句你一定不陌生。缩句就是去除各种修饰提炼出一句话的核心,而不失基...

AI9o後 ⋅ 昨天 ⋅ 0

z-index设置失效?

今天碰到了一个问题,就是在给li设置提示框的时候,有用到遮罩效果,本来想把对应的出现在最顶层,可是不管将li设置的z-index值设为多大,li都没有出现在遮罩层之上。 我在网上查了z-index设...

IrisHunag ⋅ 昨天 ⋅ 0

CyclicBarrier、CountDownLatch以及Semaphore使用及其原理分析

CyclicBarrier、CountDownLatch以及Semaphore是Java并发包中几个常用的并发组件,这几个组件特点是功能相识很容易混淆。首先我们分别介绍这几个组件的功能然后再通过实例分析和源码分析其中设...

申文波 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部