博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 工厂模式的两种实现
阅读量:4505 次
发布时间:2019-06-08

本文共 3025 字,大约阅读时间需要 10 分钟。

Thinking in Java(7)

1.1 Java工厂模式(不适用匿名类)

public interface Service {    public void method1();    public void method2();}public interface ServiceFactory {    public Service getService();}import java.io.*;class Factory1 implements Service{    Factory1() {}    @Override    public void method1() {        // TODO Auto-generated method stub        System.out.println("工厂1生产了1号产品");    }    @Override    public void method2() {        // TODO Auto-generated method stub        System.out.println("工厂1生产了2号产品");    }}class Factory1Service implements ServiceFactory {    @Override    public Service getService() {        // TODO Auto-generated method stub        return new Factory1();    }}class Factory2 implements Service {    @Override    public void method1() {        // TODO Auto-generated method stub        System.out.println("工厂2生产了1号产品");    }    @Override    public void method2() {        // TODO Auto-generated method stub        System.out.println("工厂2生产了2号产品");    }    }class Factory2Service implements ServiceFactory {    @Override    public Service getService() {        // TODO Auto-generated method stub        return new Factory2();    }}public class Factories1 {    public static void go(ServiceFactory servicefactory) {        Service serv = servicefactory.getService();        serv.method1();        serv.method2();    }    public static void main(String[] args) {        go(new Factory1Service());        go(new Factory2Service());    }}

1.2 使用匿名类的实现

注意将工厂构造函数设为私有, 个人觉得这种方式很优雅

import java.io.*;class Factory3 implements Service {    private Factory3() {}    @Override    public void method1() {        // TODO Auto-generated method stub        System.out.println("工厂3生产了1号产品");    }    @Override    public void method2() {        // TODO Auto-generated method stub        System.out.println("工厂3生产了2号产品");    }    public static ServiceFactory factory3 =             new ServiceFactory() {                @Override                public Service getService() {                    // TODO Auto-generated method stub                    return new Factory3();                }            };}class Factory4 implements Service {    private Factory4() {}    @Override    public void method1() {        // TODO Auto-generated method stub        System.out.println("工厂4生产了1号产品");    }    @Override    public void method2() {        // TODO Auto-generated method stub        System.out.println("工厂4生产了2号产品");    }    public static ServiceFactory factory4 =             new ServiceFactory() {                @Override                public Service getService() {                    // TODO Auto-generated method stub                    return new Factory4();                }            };}public class Factories2 {    public static void go(ServiceFactory sf) {        Service serv = sf.getService();        serv.method1();        serv.method2();    }    public static void main(String[] args) {        go(Factory3.factory3);        go(Factory4.factory4);    }}

转载于:https://www.cnblogs.com/xingxing1024/p/7475932.html

你可能感兴趣的文章
python基本数据类型
查看>>
理解MapReduce
查看>>
Vulkan的分层设计
查看>>
WCF 定义SOAP和REST风格的webservice
查看>>
关于display
查看>>
图片懒加载
查看>>
tomcat下jndi的三种配置方式
查看>>
JS moveStart和moveEnd方法(TextRange对象--查找与选择)
查看>>
textArea中的placeholder属性不起作用
查看>>
Swift 里字符串(一)概览
查看>>
温故知新 javascript 正则表达式(转载)
查看>>
XP系统无法远程桌面
查看>>
正确使用索引
查看>>
java多态
查看>>
盒覆盖 算法
查看>>
bzoj1260 [CQOI2007]涂色paint
查看>>
仿网上银行虚拟键盘脚本- keyboard.js
查看>>
makefile "=" ":=" "?=" "+="
查看>>
机会是留给有准备的人
查看>>
实战是最好的学习方式
查看>>