[设计模式]工厂模式
工厂模式
工厂模式演变一:
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 }
=================================华丽丽的分割线=======================================
[设计模式]工厂模式相关推荐
- Java设计模式-工厂模式(3)抽象工厂模式
在Java设计模式-工厂模式(2)工厂方法模式 我们知道了工厂方法模式解决了简单工厂模式中的缺陷,做到了满足开闭原则,但是时代是进步的,进而又产生新的问题,工厂难道只能生产一种东西吗.我们所见到的工厂 ...
- Java设计模式-工厂模式(2)工厂方法模式
在Java设计模式-工厂模式(1)简单工厂模式 中我们介绍了简单工厂模式,提到了简单工厂模式违背了开闭原则,而"工厂方法模式"是对简单工厂模式的进一步抽象化,其好处是可以使系统在不 ...
- Java设计模式-工厂模式(1)简单工厂模式
Java设计模式-工厂模式(1)简单工厂模式 一.前言 1)例子 2)类图关系 3)代码实现 二.简单工厂模式 2.1.概述: 2.2.类图关系: 2.3.代码修改: 2.4.优缺点 2.5.扩展-简 ...
- 设计模式---工厂模式
设计模式---工厂模式 工厂方法模式 概述:工厂方法模式中抽象工厂负责定义创建对象的接口,具体创建工作由继承抽象工厂的具体类实现. 优点:客户端不需要再负责对象的创建,从而明确了各个类的职责,如果有新 ...
- java设计模式工厂模式_Java中的工厂设计模式
java设计模式工厂模式 Welcome to the Factory Design Pattern in Java tutorial. Factory Pattern is one of the C ...
- java设计模式工厂模式_Java中的复合设计模式
java设计模式工厂模式 Composite pattern is one of the Structural design pattern. Composite design pattern is ...
- java设计模式工厂模式_Java中的桥梁设计模式
java设计模式工厂模式 Today we will look into Bridge Design Pattern in java. When we have interface hierarchi ...
- java设计模式工厂模式_Java中的外观设计模式
java设计模式工厂模式 Facade Design Pattern is one of the Structural design patterns (such as Adapter pattern ...
- 设计模式-工厂模式(学习)
设计模式-工厂模式(学习) 在程序的世界里,就像射雕英雄传一样,我们的技能就像是武功一样,我们只有不断去学习练习才能有机会像郭靖一样成为"天下第一". 我认为技能和武功是很类似的, ...
- 设计模式-工厂模式的3中不同实现[JAVA]
设计模式-工厂模式的3中不同实现[JAVA] 工厂模式简介 In Factory pattern, we create object without exposing the creation log ...
最新文章
- 作为产品经理,你需要了解的基本算法知识和实操
- 「欧洲AI联合实验室」ELLIS成立:誓与中美抢人才
- NIO详解(四):NIO编程
- CF - 741(C. Arpa’s overnight party and Mehrdad’s silent entering) 二分图构造
- springmvc学习笔记--ueditor和springmvc的集成
- 在Excel中实现查询功能
- 可视化折线圆形统计图_统计图表的优雅变换:Altair|可视化系列06
- 浏览器加载渲染网页过程解析-总结
- python 灰度直方图_python3+opencv 使用灰度直方图来判断图片的亮暗操作
- 基于jquery.fixedheadertable 表格插件左侧固定 对齐
- android 远程下载与pull解析技术
- C语言学习笔记--函数
- Python删除文件中含有特定值的行
- js 调用摄像头拍照
- 数学建模(6)典型相关性分析
- 色彩搭配方案与其特性描述
- 树莓派3B安装影音系统OSMC
- 设置Layui表格字段的字体颜色
- shell脚本编写中的#!shebang详解
- 【Web前端HTML5CSS3】02-前端开发准备