02. Factory Method模式代码
2012-03-30 00:49
246 查看
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(); } }
相关文章推荐
- 设计模式(Design Patterns)-可复用面向对象软件的基础 02:工厂方法模式(Factory Method)和抽象工厂模式(Abstract Factory)
- Java设计模式圣经连载(02)-工厂方法(Factory Method)模式
- C#设计模式之工厂模式(Factory)--02 工厂方法模式(Factory Method)
- Java设计模式圣经连载(02)-工厂方法(Factory Method)模式
- Java设计模式圣经连载(02)-工厂方法(Factory Method)模式
- (02)-工厂方法(Factory Method)模式
- 设计模式实例与代码:Factory Method模式
- 代码设计模式之工厂方法模式(Factory Method)
- (创建型模式)FACTORY METHOD——工厂方法模式
- java设计模式之一工厂模式(Factory Method)
- 设计模式之一---工厂方法模式【Factory Method模式】
- 面向对象设计模式纵横谈:Factory Method 工厂方法模式(笔记记录)
- 温习C#设计模式之(二) 工厂方法模式(Factory Method)
- 设计模式(九)[创建模式] 工厂方法模式(Factory Method)
- [设计模式]工厂方法模式(Factory Method)
- 由歌词引发的模式思考之上篇(FactoryMethod模式)
- 23设计模式之工厂方法(FactoryMethod)
- C#设计模式(5)-Factory Method Pattern
- 设计模式一 - Simple Factory, Factory Method, Abstract Factory以及Builder模式简述
- 设计模式——工厂模式(Factory Method)