工厂模式

工厂模式演变一:

 1 package cn.itcast.factorydemo01;
 2
 3 //声明一个接口
 4 interface Fruit {
 5     //接口中定义一个eat()方法
 6     public void eat();
 7 }
 8 //声明两个类实现这个接口
 9 class Apple implements Fruit{
10     public void eat() {
11         System.out.println("吃苹果");
12     }
13 }
14 class Orange implements Fruit{
15     public void eat(){
16         System.out.println("吃橘子");
17     }
18 }
19 //声明一个工厂类,用于获得一个水果Fruit的实例
20 class Factory{
21     public static Fruit getInstance(String className){
22         Fruit f = null;
23         if(className.equals("apple")){
24             f = new Apple();
25         }
26         if(className.equals("orange")){
27             f = new Orange();
28         }
29         return f;
30     }
31 }
32
33 public class FactoryDemo01 {
34     public static void main(String[] args) {
35         //调用工厂类Factory中的getInstance()方法
36         Fruit f = Factory.getInstance("apple");
37         f.eat();
38     }
39 }

工厂模式演变二:

 1 package cn.itcast.factorydemo02;
 2
 3 //声明一个接口
 4 interface Fruit {
 5     //接口中定义一个eat()方法
 6     public void eat();
 7 }
 8 //声明两个类实现这个接口
 9 class Apple implements Fruit{
10     public void eat() {
11         System.out.println("吃苹果");
12     }
13 }
14 class Orange implements Fruit{
15     public void eat(){
16         System.out.println("吃橘子");
17     }
18 }
19
20 //声明一个工厂类,用于获得一个水果Fruit的实例
21     /*
22     class Factory{
23         public static Fruit getInstance(String className){
24             Fruit f = null;
25             if(className.equals("apple")){
26                 f = new Apple();
27             }
28             if(className.equals("orange")){
29                 f = new Orange();
30             }
31             return f;
32         }
33     }
34     */
35 class Factory{
36     public static Fruit getInstance(String className){
37         Fruit f = null;
38         //利用反射 由一个类的名称 得到一个类的实例对象
39         try {
40             f = (Fruit) Class.forName(className).newInstance();
41         } catch (Exception e) {
42             e.printStackTrace();
43         }
44         return f;
45     }
46 }
47 public class FactoryDemo02 {
48     public static void main(String[] args) {
49         //调用工厂类Factory中的getInstance()方法
50         //因为这个地方用到的是Class类反射生成的一个对象,所以这个地方getInstace(String name)
51         //这个name对应的是一个类路径.在哪个包下的什么类中
52         Fruit f = Factory.getInstance("cn.itcast.factorydemo02.Apple");
53         f.eat();
54     }
55     //这种方式的缺点是getInstance中要书写的类的名称太长.
56 }

工厂模式演变三:

 1 package cn.itcast.factorydemo03;
 2
 3 import java.io.File;
 4 import java.io.FileInputStream;
 5 import java.io.FileNotFoundException;
 6 import java.io.FileOutputStream;
 7 import java.io.IOException;
 8 import java.util.InvalidPropertiesFormatException;
 9 import java.util.Properties;
10
11 //声明一个接口
12 interface Fruit {
13     //接口中定义一个eat()方法
14     public void eat();
15 }
16 //声明两个类实现这个接口
17 class Apple implements Fruit{
18     public void eat() {
19         System.out.println("吃苹果");
20     }
21 }
22 class Orange implements Fruit{
23     public void eat(){
24         System.out.println("吃橘子");
25     }
26 }
27 class Factory{
28     public static Fruit getInstance(String className){
29         Fruit f = null;
30         //利用反射 由一个类的名称 得到一个类的实例对象
31         try {
32             f = (Fruit) Class.forName(className).newInstance();
33         } catch (Exception e) {
34             e.printStackTrace();
35         }
36         return f;
37     }
38 }
39 //定义一个属性操作类
40 class PropertiesOperate{
41     private Properties pro = null;
42     //在F盘new一个文件,代码和配置文件分离,通过配置文件控制代码的运行结果,这个是工厂模式的一个重要设计思想.
43     private File file = new File("F:"+File.separator+"fruit.properties");
44     //构造方法
45     public PropertiesOperate(){
46         this.pro = new Properties();
47         if(file.exists()){//如果属性(配置)文件存在
48             try {
49                 pro.loadFromXML(new FileInputStream(file));//读取这个文件
50             } catch (Exception e) {
51                 e.printStackTrace();
52             }
53         }else{//如果这个属性(配置)文件不存在
54             this.save();
55         }
56
57     }
58     private void save(){
59         //Properties对象pro的setProperty方法设置文件中的内容
60         this.pro.setProperty("apple", "cn.itcast.factorydemo03.Apple");
61         this.pro.setProperty("orange", "cn.itcast.factorydemo03.Orange");
62         try {
63             this.pro.storeToXML(new FileOutputStream(this.file), "Fruit");
64         } catch (Exception e) {
65             e.printStackTrace();
66         }
67     }
68     public Properties getProperties(){
69         return this.pro;
70     }
71 }
72 public class FactoryDemo03 {
73     public static void main(String[] args) {
74         Properties pro = new PropertiesOperate().getProperties() ;
75         Fruit f = Factory.getInstance(pro.getProperty("orange"));
76         f.eat();
77     }
78 }

=================================华丽丽的分割线=======================================

[设计模式]工厂模式相关推荐

  1. Java设计模式-工厂模式(3)抽象工厂模式

    在Java设计模式-工厂模式(2)工厂方法模式 我们知道了工厂方法模式解决了简单工厂模式中的缺陷,做到了满足开闭原则,但是时代是进步的,进而又产生新的问题,工厂难道只能生产一种东西吗.我们所见到的工厂 ...

  2. Java设计模式-工厂模式(2)工厂方法模式

    在Java设计模式-工厂模式(1)简单工厂模式 中我们介绍了简单工厂模式,提到了简单工厂模式违背了开闭原则,而"工厂方法模式"是对简单工厂模式的进一步抽象化,其好处是可以使系统在不 ...

  3. Java设计模式-工厂模式(1)简单工厂模式

    Java设计模式-工厂模式(1)简单工厂模式 一.前言 1)例子 2)类图关系 3)代码实现 二.简单工厂模式 2.1.概述: 2.2.类图关系: 2.3.代码修改: 2.4.优缺点 2.5.扩展-简 ...

  4. 设计模式---工厂模式

    设计模式---工厂模式 工厂方法模式 概述:工厂方法模式中抽象工厂负责定义创建对象的接口,具体创建工作由继承抽象工厂的具体类实现. 优点:客户端不需要再负责对象的创建,从而明确了各个类的职责,如果有新 ...

  5. java设计模式工厂模式_Java中的工厂设计模式

    java设计模式工厂模式 Welcome to the Factory Design Pattern in Java tutorial. Factory Pattern is one of the C ...

  6. java设计模式工厂模式_Java中的复合设计模式

    java设计模式工厂模式 Composite pattern is one of the Structural design pattern. Composite design pattern is ...

  7. java设计模式工厂模式_Java中的桥梁设计模式

    java设计模式工厂模式 Today we will look into Bridge Design Pattern in java. When we have interface hierarchi ...

  8. java设计模式工厂模式_Java中的外观设计模式

    java设计模式工厂模式 Facade Design Pattern is one of the Structural design patterns (such as Adapter pattern ...

  9. 设计模式-工厂模式(学习)

    设计模式-工厂模式(学习) 在程序的世界里,就像射雕英雄传一样,我们的技能就像是武功一样,我们只有不断去学习练习才能有机会像郭靖一样成为"天下第一". 我认为技能和武功是很类似的, ...

  10. 设计模式-工厂模式的3中不同实现[JAVA]

    设计模式-工厂模式的3中不同实现[JAVA] 工厂模式简介 In Factory pattern, we create object without exposing the creation log ...

最新文章

  1. 作为产品经理,你需要了解的基本算法知识和实操
  2. 「欧洲AI联合实验室」ELLIS成立:誓与中美抢人才
  3. NIO详解(四):NIO编程
  4. CF - 741(C. Arpa’s overnight party and Mehrdad’s silent entering) 二分图构造
  5. springmvc学习笔记--ueditor和springmvc的集成
  6. 在Excel中实现查询功能
  7. 可视化折线圆形统计图_统计图表的优雅变换:Altair|可视化系列06
  8. 浏览器加载渲染网页过程解析-总结
  9. python 灰度直方图_python3+opencv 使用灰度直方图来判断图片的亮暗操作
  10. 基于jquery.fixedheadertable 表格插件左侧固定 对齐
  11. android 远程下载与pull解析技术
  12. C语言学习笔记--函数
  13. Python删除文件中含有特定值的行
  14. js 调用摄像头拍照
  15. 数学建模(6)典型相关性分析
  16. 色彩搭配方案与其特性描述
  17. 树莓派3B安装影音系统OSMC
  18. 设置Layui表格字段的字体颜色
  19. shell脚本编写中的#!shebang详解
  20. 【Web前端HTML5CSS3】02-前端开发准备

热门文章

  1. PhpStorm 下某个PHP文件无法识别、无方法提示、无法跳转到其他方法
  2. [Matlab]中pcolor和colormap的使用
  3. MAC使用CodeSign查看已签名的文件的数字签名情况
  4. VirtualBox安装MACOSX 10.13虚拟机的增强功能
  5. 软件基本功:做自说明的测试文档,
  6. 人都喜欢抬杠:一时不抬杠就浑身难受综合症候群
  7. 安装软件,竟然把UOS装崩溃了
  8. VS遍历windows文件夹的代码
  9. 古人从瀑布中看到彩虹,怎么想的?
  10. mysql 抓包工具_好用的MySQL抓包工具:sniffer-agent