02. Factory Method模式代码

原创 2012年03月30日 00:49:42

    2. Factory Method 本质:延迟到子类来选择实现
      2.1 EXPORT OPERATE FACTORY
        public interface ExportFileApi {
            public boolean export(String data);
        }
        public class ExportDb implements ExportFileApi{
            public boolean export(String data) {
                System.out.println("Export data '" + data + "' to DB.");
                return true;
            }
        }
        public class ExportTxtFile implements ExportFileApi{
            public boolean export(String data) {
                System.out.println("Export data '" + data + "' to a TXT file.");
                return true;
            }
        }
        public abstract class ExportOperateFactory {
            public boolean export(String data) {
                ExportFileApi api = factoryMethod();
                return api.export(data);
            }
            protected abstract ExportFileApi factoryMethod();
        }
        public class ExportDbOperateFactory extends ExportOperateFactory {
            protected ExportFileApi factoryMethod() {
                return new ExportDb();
            }
        }
        public class ExportTxtFileOperateFactory extends ExportOperateFactory {
            protected ExportFileApi factoryMethod() {
                return new ExportTxtFile();
            }
        }
        public class FactoryMethodClient {
            public static void main(String[] args) {
                ExportOperateFactory operateFactory = new ExportDbOperateFactory();
                operateFactory.export("data for testing");
            }
        }
      2.2 HUMAN FACTORY
        public interface Human {
            //每个人种都有相应的颜色
            public void getColor();
            //人类会说话
            public void talk();
        }
        public class WhiteHuman implements Human {
            //白色人种的颜色是白色的
            public void getColor(){
                System.out.println("白色人种的皮肤颜色是白色的!");
            }
            //白色人种讲话
            public void talk() {
                System.out.println("白色人种会说话,一般都是但是单字节。");
            }
        }
        public class BlackHuman implements Human {
            public void getColor(){
                System.out.println("黑色人种的皮肤颜色是黑色的!");
            }
            public void talk() {
                System.out.println("黑人会说话,一般人听不懂。");
            }
        }
        public class YellowHuman implements Human {
            public void getColor(){
                System.out.println("黄色人种的皮肤颜色是黄色的!");
            }
            public void talk() {
                System.out.println("黄色人种会说话,一般说的都是双字节。");
            }
        }
        public abstract class AbstractHumanFactory {
            public abstract <T extends Human> T createHuman(Class<T> c);
        }
        public class HumanFactory extends AbstractHumanFactory {
            public <T extends Human> T createHuman(Class<T> c){
                //定义一个生产的人种
                Human human=null;
                try {
                    //产生一个人种
                    human = (Human)Class.forName(c.getName()).newInstance();
                } catch (Exception e) {
                    System.out.println("人种生成错误!");
                }
                return (T)human;
            }
        }
        public class NvWa {
            public static void main(String[] args) {
                //声明阴阳八卦炉
                AbstractHumanFactory YinYangLu = new HumanFactory();
                //女娲第一次造人
                System.out.println("--造出的第三批人是白色人种--");
                Human whiteHuman = YinYangLu.createHuman(WhiteHuman.class);
                whiteHuman.getColor();
                whiteHuman.talk();
                //女娲第二次造人
                System.out.println("\n--造出的第三批人是黑色人种--");
                Human blackHuman = YinYangLu.createHuman(BlackHuman.class);
                blackHuman.getColor();
                blackHuman.talk();
                //第三次造人
                System.out.println("\n--造出的第三批人是黄色人种--");
                Human yellowHuman = YinYangLu.createHuman(YellowHuman.class);
                yellowHuman.getColor();
                yellowHuman.talk();
            }
        }


 

设计模式总结之Factory Method Pattern(工厂方法模式)

定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。...
  • cooldragon
  • cooldragon
  • 2016年08月11日 00:44
  • 1262

Factory Method vs Abstract Factory

Factory Method vs Abstract Factory
  • u010373266
  • u010373266
  • 2016年12月20日 16:26
  • 314

浅谈JAVA设计模式之——工厂方法(FactoryMethod)

一、概述             定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例化延迟到其子类。       二、适用性  当一个类不知道它所必须创建...
  • l1028386804
  • l1028386804
  • 2015年05月02日 17:27
  • 1145

设计模式之工厂方法模式(Factory Method)摘录

设计模式之工厂方法模式(Factory Method)摘录!
  • fengbingchun
  • fengbingchun
  • 2014年03月23日 16:44
  • 2045

以boost factory &amp; boost function实现对象工厂设计模式

  本文介绍以boost factory & boost function实现C++对象工厂设计模式
  • mpforwd
  • mpforwd
  • 2010年08月05日 21:42
  • 4421

设计模式:Abstract Factory和Builder(比较区别,个人认为讲得很明白)

如果说 Factory和Prototype是同一个层次的话,那么Abstract Factory和Builder就是更高一级的层次。 1 Abstact Factory   在上面的Factory类型...
  • lovingprince
  • lovingprince
  • 2007年04月17日 10:59
  • 4223

JAVA设计模式三--factorymethod(工厂方法模式)

Factory Method,工厂方法: 定义一个用于创建对象的接口,让子类决定实例化哪一个类, Factory Method使一个类的实例化延迟到了子类 工厂方法模式   工厂方法(...
  • hfmbook
  • hfmbook
  • 2012年06月20日 17:24
  • 1760

对象创建模式—Factory Method

1,意图     定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到了子类。2,适用性     1>当一个类不知道他所必须创建的对象的类的时候。 ...
  • v1v1wang
  • v1v1wang
  • 2010年05月29日 18:55
  • 336

工厂方法(Factory Method)模式

function StorePage(){d=document;t=d.selection?(d.selection.type!=None?d.selection.createRange().text...
  • zhihua_1983
  • zhihua_1983
  • 2006年11月28日 14:58
  • 528

factory method模式

将如何实例化的问题推给子类。
  • gzso205
  • gzso205
  • 2011年08月31日 13:45
  • 107
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:02. Factory Method模式代码
举报原因:
原因补充:

(最多只允许输入30个字)