`
xyheqhd888
  • 浏览: 404271 次
  • 性别: Icon_minigender_1
  • 来自: 秦皇岛
社区版块
存档分类
最新评论

工厂方法模式示例

阅读更多
//工厂方法模式示例:
package innerclasses;

import static net.mindview.util.Print.*;

interface Service{
        void method1();
        void method2();
}

interface ServiceFactory{
        Service getService();
}

class Implementation1 implements Service{
        private Implementation1 (){}           //private的构造函数,只能在当前类中调用此方法创建对象
        public void method1(){
                println("Implementation1 method1");
        }
        public void method2(){
                println("Implementation1 method2");
        }
        public static ServiceFactory factory =   //因为只需要一个factory对象,所以这里定义为static
                new ServiceFactory(){                //作为工厂的类使用匿名类来实现,
                        public Service getService(){
                                return new Implementation1();                
                        }
        };
}

class Implementation2 implements Service{
        private Implementation2(){}
        public void method1(){
                System.out.println("Implementation2 method1");
        }
        public void method2(){
                System.out.println("Implementation2 method2");
        }
        public static ServiceFactory factory = 
                new ServiceFactory(){
                        public Service getService(){
                                return new Implementation2();
                        }
        };
}

public class Factories {
        public static void serviceConsumer(ServiceFactory fact){
                Service s = fact.getService();
                s.method1();
                s.method2();
        }
        public static void main(String[] args) {
                serviceConsumer(Implementation1.factory);
                serviceConsumer(Implementation2.factory);
        }
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics