Program:

请采用采用简单工厂设计模式,为某个汽车销售店设计汽车销售系统,接口car至少有方法print(),

三个汽车类:宝马、奥迪、大众 (属性:品牌,价格),在测试类中根据客户要求购买的汽车品牌,

通过接口car为客户提供相应的汽车对象。

Description:通过java反射机制和Properties类的结合使用,实现工厂模式。代码如下:

1、首先是entity包中的一个接口和三个实体类

汽车接口:

 1 /*
2 *Description:定义汽车接口
3 * */
4
5
6 package entity;
7
8 public interface Car {
9
10 public void printInfo(); //打印汽车信息
11 }

三个实体类:

 1 /*
2 * Description:定义奥迪类,并实现接口
3 *
4 * */
5
6 package entity;
7
8 public class AoDi implements Car{
9
10 private String brand = "奥迪"; //品牌
11 private double price = 10000000; //价格
12
13
14 public AoDi(){}
15
16 public AoDi(String brand,double price) {
17
18 this.brand = brand;
19 this.price = price;
20 }
21
22 public String getBrand() {
23 return brand;
24 }
25
26 public void setBrand(String brand) {
27 this.brand = brand;
28 }
29
30 public double getPrice() {
31 return price;
32 }
33
34 public void setPrice(double price) {
35 this.price = price;
36 }
37
38 @Override
39 public String toString() {
40 return "AoDi [brand=" + brand + ", price=" + price + "]";
41 }
42
43 public void printInfo() { //实现接口方法
44
45 System.out.println( "我是奥迪:" );
46 System.out.println( this.toString() );
47 }
48
49
50 }
 1 /*
2 * Description:定义宝马类,实现接口
3 *
4 * */
5
6 package entity;
7
8 public class BaoMa implements Car{
9
10 private String brand = "宝马"; //品牌
11 private double price = 1000000; //价格
12
13 public BaoMa(){}
14
15 public BaoMa(String brand,double price) {
16
17 this.brand = brand;
18 this.price = price;
19 }
20
21 public String getBrand() {
22 return brand;
23 }
24
25 public void setBrand(String brand) {
26 this.brand = brand;
27 }
28
29 public double getPrice() {
30 return price;
31 }
32
33 public void setPrice(double price) {
34 this.price = price;
35 }
36
37 @Override
38 public String toString() {
39 return "Baoma [brand=" + brand + ", price=" + price + "]";
40 }
41
42 public void printInfo() { //实现接口方法
43
44 System.out.println( "我是宝马:" );
45 System.out.println( this.toString() );
46 }
47
48
49 }
 1 /*
2 * Description:定义大众类,并实现接口
3 *
4 * */
5
6
7 package entity;
8
9 public class DaZhong implements Car{
10
11 private String brand = "大众"; //品牌
12 private double price = 100000; //价格
13
14
15 public DaZhong(){}
16
17 public DaZhong(String brand,double price) {
18
19 this.brand = brand;
20 this.price = price;
21 }
22
23 public String getBrand() {
24 return brand;
25 }
26
27 public void setBrand(String brand) {
28 this.brand = brand;
29 }
30
31 public double getPrice() {
32 return price;
33 }
34
35 public void setPrice(double price) {
36 this.price = price;
37 }
38
39 @Override
40 public String toString() {
41 return "DaZhong [brand=" + brand + ", price=" + price + "]";
42 }
43
44 public void printInfo() { //实现接口方法
45
46 System.out.println( "我是大众:" );
47 System.out.println( this.toString() );
48 }
49
50
51 }

2、以下是工具包tools中的类

初始化Properties类型文件

 1 /*
2 * Description:该类完成属性文件的初始化
3 *
4 *
5 * */
6
7 package tools;
8 import java.io.File;
9 import java.io.FileInputStream;
10 import java.io.FileOutputStream;
11 import java.util.Properties;
12
13 public class Init {
14
15 public static Properties getProperty() {
16
17 Properties pro = new Properties(); //声明对象
18
19 //实例化File类对象
20 File file = new File( "D:" + File.separator + "init.properties" );
21
22 try {
23 if( file.exists() ) { //属性文件存在
24 pro.load( new FileInputStream(file) ); //加载文件
25 }else {
26
27 //文件不存在,编辑文件内容
28 pro.setProperty("大众","entity.DaZhong" );
29 pro.setProperty("宝马", "entity.BaoMa");
30 pro.setProperty("奥迪", "entity.AoDi");
31
32 //进行存储
33 pro.store(new FileOutputStream(file), "The information of the car");
34 }
35 }catch(Exception e) {
36
37 e.printStackTrace();
38 }
39
40 return pro;
41 }
42
43 }

定义工厂类

 1 /*
2 * Description:定义工厂类,通过工厂模式,和反射机制的应用,取得实例化对象,并实例化接口对象,返回接口类型
3 *
4 *
5 * */
6
7
8 package tools;
9
10 import entity.Car;
11
12 public class Factory {
13
14 public static Car getInstance(String carName) { //此处传递过来的参数是 包.类名
15
16 Car car = null;
17
18 try {
19 car = (Car)Class.forName(carName).newInstance(); //实例化对象
20
21 }catch(Exception e) {
22
23 e.printStackTrace();
24 }
25 return car;
26 }
27 }

定义操作类,接收用户输入

 1 /*
2 * Description:定义Operator类,取得用户的输入值
3 *
4 * */
5
6 package tools;
7 import java.util.Scanner;
8
9 public class Operate {
10
11 public static String getInput() {
12
13 Scanner scan = new Scanner(System.in);
14 String carName = "";
15 System.out.println( "用户输入车的名称:" );
16 carName = scan.next();
17 return carName; //返回用户的输入值
18 }
19
20 }

main方法,测试整个工程

 1 /*
2 * Description:类的接口的运用
3 *
4 * Written By:Cai
5 *
6 * Date Writen:2017-09-25
7 *
8 *
9 * */
10 /*
11 * Description:java反射机制,属性文件,实现工厂模式
12 *
13 * Written By:Cai
14 *
15 * Date Written:2017-09-24
16 *
17 *
18 * */
19
20
21 package main;
22
23 import java.util.Properties; //引入属性文件
24 import tools.Factory; //引入自定义的类
25 import tools.Operate;
26 import entity.Car;
27 import tools.Init;
28
29 public class DemoThree4 {
30
31 public static void main(String args[]) {
32
33 Car car = null;
34 String carName = Operate.getInput(); //取得用户的输入内容(此处没有加数据的合法验证)
35 Properties pro = Init.getProperty(); //数理化Properties对象
36
37 car = Factory.getInstance( pro.getProperty(carName) ); //通过属性文件取得实例化对象,并实例化Car对象
38 car.printInfo(); //调用被实例对象覆写的方法
39
40 }
41 }

备注:起步小白,请多指教!

Java实验项目三——简单工厂模式的更多相关文章

  1. Java设计模式学习记录-简单工厂模式、工厂方法模式

    前言 之前介绍了设计模式的原则和分类等概述.今天开启设计模式的学习,首先要介绍的就是工厂模式,在介绍工厂模式前会先介绍一下简单工厂模式,这样由浅入深来介绍. 简单工厂模式 做法:创建一个工厂(方法或类 ...

  2. Java设计模式2:简单工厂模式

    简单工厂模式 简单工厂模式是类的创建模式,又叫做静态工厂方法模式.简单工厂模式由一个工厂对象决定生产出哪一种产品类的实例. 为什么要使用简单工厂模式 原因很简单:解耦. A对象如果要调用B对象,最简单 ...

  3. (转)java反射机制及简单工厂模式

    第一步,定义一个接口类 package factory.face; /** * 接口,为了保证返回的对象可以统一用 Product接受 * @author Administrator */ publi ...

  4. JAVA基础——设计模式之简单工厂模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂 ...

  5. java设计模式-----1、简单工厂模式

    简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例,简单来说 ...

  6. Java实验项目三——职工类对象数组按照职工生日排序

    Program: 修改项目三(1)中的第3题,实现比较方法,将对象数组的数据按照生日的大小给职工排序. Description:令日期类MyDate和员工类Worker类实现接口Comparable, ...

  7. Java实验项目六——使用DAO模式实现对职工表的操作

    Program: 利用JDBC访问职工信息表,实现对职工信息的添加.更新.删除.按照职工号查找.查找全部职工的功能. Description:在这里我采用了DAO设计模式完成对职工表的操作,下面介绍一 ...

  8. Java实验项目三——编程实现Person类,学生类的设计及其继承关系

    Program: 编程实现Person类,学生类的设计及其继承关系 代码如下: 定义抽象类Person 1 /* 2 * Description:建立抽象类 3 * 4 * Written By:Ca ...

  9. JAVA设计模式之【简单工厂模式】

    1.创建抽象类User public abstract class User // 抽象类 { public void sameOperation() { System.out.println(&qu ...

随机推荐

  1. MyBatis 环境搭建(四)

    MyBatis 引言 在回顾JDBC时,我们已经创建有 Java 工程,而且也已经导入 mysql 依赖包,这里就直接在原有工程上搭建MyBatis环境,以及使用MyBatis来实现之前用 JDBC ...

  2. IDEA 快速上手指南(全配置)(Day_23)

    Idea快速入门指南 1.安装 1.1.安装 我们使用的是2017.3.4版本: 双击打开, 选择一个目录,最好不要中文和空格: 然后选择桌面快捷方式,请选择64位: 然后选择安装: 开始安装: 然后 ...

  3. minikube与kubectl版本不一致问题

    在使用minikube学习的时候,会出现你在mac上安装的minikube默认是最新版本,但是实际情况是需要安装低一些版本.可以按照k8s官方文档安装的时候指定不同安装版本,如果很慢或者无法访问直接走 ...

  4. pika详解(四) channel 通道

    pika详解(四) channel 通道   本文链接:https://blog.csdn.net/comprel/article/details/94662394 版权 ​ channel通道 通道 ...

  5. C#解决WebClient不能下载https网页内容

    在下载之前,执行以下代码即可: if (stUrl.Substring(0, 5) == "https") { // 解决WebClient不能通过https下载内容问题 Serv ...

  6. win10下abd环境配置

    一.下载安装 Android SDK 下载地址: http://tools.android-studio.org/index.php/sdk 下载完成后进行解压至D盘根目录下,也可以自定义英文路径下 ...

  7. Django(58)viewsets视图集详解

    前言 ViewSet 只是一种基于类的视图,它不提供任何方法处理程序(如 .get()或.post()),而是提供诸如.list()和 .create() 之类的操作. ViewSet 的方法处理程序 ...

  8. Java抽象类、继承及多态和适配器的实现

    Java继承 方法重写是Java语言多态的特性,必须满足以下条件 在子类中,方法名称与父类方法名称完全相同 方法的参数个数和类型完全相同,返回类型完全相同 方法的访问修饰符访问级别不低于父类同名方法的 ...

  9. 1.5w字 + 24张图肝翻 TCP。

    TCP 是一种面向连接的单播协议,在 TCP 中,并不存在多播.广播的这种行为,因为 TCP 报文段中能明确发送方和接受方的 IP 地址. 在发送数据前,相互通信的双方(即发送方和接受方)需要建立一条 ...

  10. Spring Boot WebFlux-06——WebFlux 整合 Redis

    第06课:WebFlux 整合 Redis 前言 上一篇内容讲了如何整合 MongoDB,这里继续讲如何操作 Redis 这个数据源,那什么是 Reids? Redis 是一个高性能的 key-val ...