java 设计模式之抽象工厂

来源:互联网 发布:咕咚运动软件最新 编辑:程序博客网 时间:2024/06/17 13:22

苦逼的IT男睡不着,就写点东西.........

介绍JAVA设计模式之抽象工厂

抽象工厂主要是用在替换一个系列产品,类有点多,主要是写了抽象类用在扩展方面,还有就是在JDK 1.5后的枚举ENUM的应用,以及自己的一些经验.....

不多说,直接上原码,原码注解很清楚

1.首先建一个程序员类

package com.wonder.designPattern.abstractFactory;/** * 干IT的,都比较苦逼啊</br> * 程序员.....</br> * @author wonder * * @time 2013-6-20 上午12:49:52 */public interface Programmer {/** * 程序员一般睡觉很晚,就像现在苦逼的我一样!!! */public void sleep();/** * 程序员工作都很苦逼... */public void work();/** * 不同的城市待遇不一样 */public void treatment();}

2.成都程序员类

package com.wonder.designPattern.abstractFactory;/** * 成都程序员</br> * 定义为抽象类 ABSTRACK CLASS,</br> * 主要是因为定义接口时没定义性别(故意为之),不允许你NEW出来</br> * 虽然这行业女生很少</br> * 现在还来得及,可扩展.... * @author wonder * * @time 2013-6-20 上午12:57:40 */public abstract class ChengDuProgrammer implements Programmer{@Overridepublic void sleep() {// TODO Auto-generated method stubSystem.out.println("成都的程序员睡觉很晚......");}@Overridepublic void treatment() {// TODO Auto-generated method stubSystem.out.println("成都的程序员工资低......");}@Overridepublic void work() {// TODO Auto-generated method stubSystem.out.println("成都的程序员工作很苦逼.....");}}

3.深圳程序员类

package com.wonder.designPattern.abstractFactory;/** * 深圳的程序员 * @author wonder * * @time 2013-6-20 上午01:05:00 */public abstract class ShenZhengProgrammer implements Programmer{@Overridepublic void sleep() {// TODO Auto-generated method stubSystem.out.println("深圳的程序员睡觉晚....");}@Overridepublic void treatment() {// TODO Auto-generated method stubSystem.out.println("深圳程序员待遇比较高....");}@Overridepublic void work() {// TODO Auto-generated method stubSystem.out.println("深圳的程序员工作也苦逼......");}}

4.程序员呢有性别 先成都的吧 成都IT男

package com.wonder.designPattern.abstractFactory;/** * 男的程序员就苦逼了 * @author wonder * * @time 2013-6-20 上午01:15:37 */public class CDMaleProgrammer extends ChengDuProgrammer{public void sex(){System.out.println("成都苦逼IT男....");}}

5.成都IT女

package com.wonder.designPattern.abstractFactory;/** * 女的程序员在公司是抢手货啊.... * @author wonder * * @time 2013-6-20 上午01:14:27 */public class CDFemaleProgrammer extends ChengDuProgrammer{public void sex(){System.out.println("成都IT女....");}}

6.深圳IT男

package com.wonder.designPattern.abstractFactory;/** * 不管在哪,男的还是苦逼... * @author wonder * * @time 2013-6-20 上午01:22:38 */public class SZMaleProgrammer extends ShenZhengProgrammer{public void sex(){System.out.println("深圳苦逼IT男...");}}

7.深圳IT女

package com.wonder.designPattern.abstractFactory;/** * 不管在哪,女的都抢手啊 * @author wonder * * @time 2013-6-20 上午01:21:22 */public class SZFemaleProgrammer extends ShenZhengProgrammer{public void sex(){System.out.println("深圳IT女....");}}
8.程序员枚举类

package com.wonder.designPattern.abstractFactory;/** * 在此处引用了枚举</br> * 按需求定义所有的程序员</br> * 顺便解释下枚举:</br> * 在JDK 1.5 后引入进来的,用起来可以感觉和普通类中定义的静态变量差不多......</br> * 但在WEB项目中,如果要修改变量,直接用编译好的枚举类替换却不用重启服务器</br> * 这是定义静态变量普通类所做不到的..... *  * @author wonder * * @time 2013-6-20 上午01:25:07 */public enum ProgrammerEnum {//定义所有的程序员CDMaleProgrammer("com.wonder.designPattern.abstractFactory.CDMaleProgrammer"),CDFemaleProgrammer("com.wonder.designPattern.abstractFactory.CDFemaleProgrammer"),SZMaleProgrammer("com.wonder.designPattern.abstractFactory.SZMaleProgrammer"),SZFemaleProgrammer("com.wonder.designPattern.abstractFactory.SZFemaleProgrammer");private String value = "";/** * 定义构造函数,注意是PRIVATE * @param value */private ProgrammerEnum(String value){this.value = value;}/** * 获取枚举类型中一个元素的值 * @return VALUE */public String getValue(){return this.value;}}

9.程序员工厂

package com.wonder.designPattern.abstractFactory;/** * 程序员工厂,招聘程序员 * @author wonder * * @time 2013-6-20 上午01:43:43 */public interface ProgrammerFactory {/** * 在成都招聘程序员 * @return PROGRAMMER */public Programmer createChengDuProgrammer();/** * 在深圳招聘程序员 * @return PROGRAMMER */public Programmer createShenZhengProgrammer();}

10.抽象工厂

package com.wonder.designPattern.abstractFactory;/** * 根据枚举类型招聘程序员 * @author wonder * * @time 2013-6-20 上午01:48:35 */public abstract class AbstractProgrammerFactory implements ProgrammerFactory{/** * 按枚举类型招聘程序员 * @param programmerEnum * @return PROGRAMMER */protected Programmer createProgrammer(ProgrammerEnum programmerEnum){Programmer programmer = null;//传进来的是一个定义中的枚举类型就招聘一个程序员if(!programmerEnum.getValue().equals("")){try {programmer = (Programmer) Class.forName(programmerEnum.getValue()).newInstance();} catch (InstantiationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}else{System.out.println("你传的类型不正确!!!");}return programmer;}}

11.男性系列工厂

package com.wonder.designPattern.abstractFactory;/** * 招聘男性系列程序员 * @author wonder * * @time 2013-6-20 上午01:59:32 */public class MaleProgramFactory extends AbstractProgrammerFactory{@Overridepublic Programmer createChengDuProgrammer() {// TODO Auto-generated method stubreturn super.createProgrammer(ProgrammerEnum.CDMaleProgrammer);}@Overridepublic Programmer createShenZhengProgrammer() {// TODO Auto-generated method stubreturn super.createProgrammer(ProgrammerEnum.SZMaleProgrammer);}}

12.女生系列工厂

package com.wonder.designPattern.abstractFactory;/** * 招聘女性系列程序员 * @author wonder * * @time 2013-6-20 上午02:03:39 */public class FemaleProgramFactory extends AbstractProgrammerFactory{@Overridepublic Programmer createChengDuProgrammer() {// TODO Auto-generated method stubreturn super.createProgrammer(ProgrammerEnum.CDFemaleProgrammer);}@Overridepublic Programmer createShenZhengProgrammer() {// TODO Auto-generated method stubreturn super.createProgrammer(ProgrammerEnum.SZFemaleProgrammer);}}

13.软件公司招聘程序员

package com.wonder.designPattern.abstractFactory;/** * 软件公司招聘程序员 * @author wonder * * @time 2013-6-20 上午02:05:07 */public class SoftCompany {public static void main(String[] args) {//公司同时招聘男程序员ProgrammerFactory maleProgrammerFactory = new MaleProgramFactory();//公司同时也招聘女程序员ProgrammerFactory femaleProgrammerFactory = new FemaleProgramFactory();//在成都招聘程序员CDMaleProgrammer CDProgrammer = (CDMaleProgrammer) maleProgrammerFactory.createChengDuProgrammer();//在深圳招聘程序员SZMaleProgrammer SZProgrammer = (SZMaleProgrammer) maleProgrammerFactory.createShenZhengProgrammer();/** * 哥在成都呢,所以选择成都苦逼的IT男.... */CDProgrammer.sleep();CDProgrammer.work();CDProgrammer.treatment();CDProgrammer.sex();/** * 女的程序员你自己看着办....... * 成都和深圳的由你选...... */}}

希望多多交流,有什么好的建议尽管提......

好了,睡觉了.....



原创粉丝点击