zoukankan      html  css  js  c++  java
  • java 工厂模式的两种实现

    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);
    	}
    }
    
    
  • 相关阅读:
    简单数列极限证明
    既然已经半退役了,就写点新东西吧
    快速幂(整数+实数)
    D. Constant Palindrome Sum 差分+思维
    排序网络
    ClickHouse数据同步
    C++ 复习
    使用mac查看iphone uuid方法
    15. 蓝绿发布导致需求不能验证
    通过反射获取对象的属性名、属性值
  • 原文地址:https://www.cnblogs.com/xingxing1024/p/7475932.html
Copyright © 2011-2022 走看看