Java实验项目三——简单工厂模式
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实验项目三——简单工厂模式的更多相关文章
- Java设计模式学习记录-简单工厂模式、工厂方法模式
前言 之前介绍了设计模式的原则和分类等概述.今天开启设计模式的学习,首先要介绍的就是工厂模式,在介绍工厂模式前会先介绍一下简单工厂模式,这样由浅入深来介绍. 简单工厂模式 做法:创建一个工厂(方法或类 ...
- Java设计模式2:简单工厂模式
简单工厂模式 简单工厂模式是类的创建模式,又叫做静态工厂方法模式.简单工厂模式由一个工厂对象决定生产出哪一种产品类的实例. 为什么要使用简单工厂模式 原因很简单:解耦. A对象如果要调用B对象,最简单 ...
- (转)java反射机制及简单工厂模式
第一步,定义一个接口类 package factory.face; /** * 接口,为了保证返回的对象可以统一用 Product接受 * @author Administrator */ publi ...
- JAVA基础——设计模式之简单工厂模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂 ...
- java设计模式-----1、简单工厂模式
简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例,简单来说 ...
- Java实验项目三——职工类对象数组按照职工生日排序
Program: 修改项目三(1)中的第3题,实现比较方法,将对象数组的数据按照生日的大小给职工排序. Description:令日期类MyDate和员工类Worker类实现接口Comparable, ...
- Java实验项目六——使用DAO模式实现对职工表的操作
Program: 利用JDBC访问职工信息表,实现对职工信息的添加.更新.删除.按照职工号查找.查找全部职工的功能. Description:在这里我采用了DAO设计模式完成对职工表的操作,下面介绍一 ...
- Java实验项目三——编程实现Person类,学生类的设计及其继承关系
Program: 编程实现Person类,学生类的设计及其继承关系 代码如下: 定义抽象类Person 1 /* 2 * Description:建立抽象类 3 * 4 * Written By:Ca ...
- JAVA设计模式之【简单工厂模式】
1.创建抽象类User public abstract class User // 抽象类 { public void sameOperation() { System.out.println(&qu ...
随机推荐
- docker 部署应用
Docker 部署应用 所需环境 Linux系统:centos7 (推荐7.4) Docker环境:V1.13.1 镜像:应用镜像包 docker部署和基本命令: 1. docker环境搭建 a) ...
- IDEA 配置 Tomcat(详细)(Day_12)
如果这世界上真有奇迹,那只是努力的另一个名字.生命中最难的阶段,不是没有人懂你,而是你不懂你自己. 运行环境 AND 版本 JDK8 + IntelliJ IDEA 2018.3 + Tomca ...
- 云原生ASP.NET Core程序的可监测性和可观察性
分布式应用程序很复杂,给开发人员调试和修复生产问题带来了一系列挑战.尽管微服务架构可帮助维持一支规模较小,可以自主工作并专注于独立业务团队,但由于其分布式性质,它带来了新的挑战.例如,在业务交易过程中 ...
- 高德Serverless平台建设及实践
导读 高德启动Serverless建设已经有段时间了,目前高德Serverless业务的峰值早已超过十万QPS量级,平台从0到1,QPS从零到超过十万,成为阿里集团内Serverless应用落地规模最 ...
- Api网关Kong集成Consul做服务发现及在Asp.Net Core中的使用
写在前面 Api网关我们之前是用 .netcore写的 Ocelot的,使用后并没有完全达到我们的预期,花了些时间了解后觉得kong可能是个更合适的选择. 简单说下kong对比ocelot打动我的 ...
- RabbitMQ(1)学习目标
一:安装,专业术语,简单队列,工作队列,发布/订阅队列,路由队列,主题队列,RPC队列,事务,确认模式,SpringAMQP 二:什么是MQ? MQ就是消息队列,是一种进程间通信或同一进程的不同线程间 ...
- Paddle预训练模型应用工具PaddleHub
Paddle预训练模型应用工具PaddleHub 本文主要介绍如何使用飞桨预训练模型管理工具PaddleHub,快速体验模型以及实现迁移学习.建议使用GPU环境运行相关程序,可以在启动环境时,如下图所 ...
- pytorch生成对抗示例
pytorch生成对抗示例 本文对ML(机器学习)模型的安全漏洞的认识,并将深入了解对抗性机器学习的热门话题.图像添加难以察觉的扰动会导致模型性能大不相同.通过图像分类器上的示例探讨该主题.使用第一种 ...
- 编译器设计-RunTime运行时环境
编译器设计-RunTime运行时环境 Compiler Design - Run-Time Environment 作为源代码的程序仅仅是文本(代码.语句等)的集合,要使其活动,它需要在目标计算机上执 ...
- yum的配置
1. 创建两台虚拟机[root@room9pc01 ~]# clone-vm7Enter VM number: 8 [root@room9pc01 ~]# clone-vm7Enter VM numb ...