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 }

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

时间: 2024-11-01 19:28:30

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

(三) 简单工厂模式

转载: http://www.cnblogs.com/zuoxiaolong/p/pattern4.html 上一章我们着重讨论了代理模式,以及其实现原理,相信如果你看完了整篇博文,应该就对代理模式很熟悉了. 本章我们讨论简单工厂模式,LZ当初不小心夸下海口说不和网络上传播的教学式模式讲解雷同,所以现在感觉写一篇博文压力颇大. 如何来介绍简单工厂呢,LZ着实费了不少心思,这个模式本身不复杂,但其实越是不复杂的模式越难写出特点,因为它太简单. 为了便于各位看后面例子的时候容易理解,LZ这里先给出引

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

前言 之前介绍了设计模式的原则和分类等概述.今天开启设计模式的学习,首先要介绍的就是工厂模式,在介绍工厂模式前会先介绍一下简单工厂模式,这样由浅入深来介绍. 简单工厂模式 做法:创建一个工厂(方法或类)用来制造对象. 当一个人想要用手机的时候,需要自己创建手机然后来使用. 如下: public class IphoneX { public IphoneX(){ System.out.println("##### 制造iphoneX #####"); } } public class I

Java学习笔记——对比简单工厂模式和策略模式

简单工厂模式:客户端传一个条件进工厂类,工厂类根据条件创建相应的产品类对象,客户端使用该产品类对象.工厂类依赖产品类 策略模式:客户端创建一个Context类对象,并通过传入参数使用该对象.Context类中聚合了产品类,没有依赖关系 策略模式比简单工厂模式更优雅.

Java中的三种工厂模式

/** * 设计模式之工厂模式,用户创建对象的,通过工厂模式来降低代码的耦合度 * @author  */ //简单工厂模式 public class SimpleFactory{        /**     * 根据不过的String参数 name返回不同的汽车对象name     * @param name     * @return     */    public Car getCar(String name){                /*         * 利用equals

Java实验项目三——递归实现字符串查找和替换操作

Program:按照下面要求实现字符串的操作: (1)设计一个提供下面字符串操作的类 1)编写一个方法,查找在一个字符串中指定字符串出现的次数. 2)编写一个方法,参数(母字符串,目标字符串,替换字符串)将母字符串中的所有目标字符用替换字符串替换. 3)编写一个方法,判断一个email地址是否合法. (2)编写一个测试类,对(1)中的字符串类的方法逐一进行测试. Description:前两个问题采用递归实现,最后一个问题,采用正则验证.代码如下: 1 /* 2 * Description:采用

JAVA 设计模式 简单工厂模式

用途 简单工厂模式 (Simple Factory) 又叫做静态工厂方法(Static Factory Method)模式.简单工厂模式通常是定义一个工厂类,这个类可以根据不同变量返回不同类的产品实例. 简单工厂模式是一种对象创建型模式 (可参考 设计模式 创建型模式). 但是简单工厂模式不属于23种Gof设计模式之一. 结构 如何实现一个具有加减乘除基本功能的计算器? 对于这四种运算来说,都需要两个操作数,差别仅在于返回的结果不同. 由此,我们可以抽象化它们的共性,提炼出一个父类.这个类中包含

设计模式之_简单工厂模式、工厂方法模式、抽象工厂模式 、策略模式、策略与工厂的区别(转)

一.前言 话说十年前,有一个爆发户,他家有三辆汽车(Benz(奔驰).Bmw(宝马).Audi(奥迪)),还雇了司机为他开车.不过,爆发户坐车时总是这样:上Benz车后跟司机说“开奔驰车!”,坐上Bmw后他说“开宝马车!”,坐上 Audi后他说“开奥迪车!”.你一定说:这人有病!直接说开车不就行了?!而当把这个爆发户的行为放到我们程序语言中来,我们发现C语言一直是通过这种方式来坐车的 幸运的是这种有病的现象在OO语言中可以避免了.下面以Java语言为基础来引入我们本文的主题:工厂模式! 二.简介

设计模式:简单工厂模式

介绍简单工厂模式之前先通过一个披萨项目的例子来引出问题,然后给出简单工厂模式这种解决方案,然后随着披萨项目的不断扩展,遇到新的问题,引出工厂方法模式,然后又遇到新的问题,引出最终解决方案,抽象工厂模式. 一.披萨项目介绍 比如一个披萨店 ,店长一名,目前卖两种口味披萨,GreekPizza和CheesePizza,每个披萨都有prePare(),bake(),cut(),box()这4种步骤,原料,烘培,切割,打包,最后给用户吃. 把上述这个过程抽象后,设计如下: Pizza披萨抽象类: pac

设计模式一:简单工厂模式

概念理解: 1. 解耦:一般通过增加一些抽象层,来实现 功能提供者和功能使用者 两者的解耦隔离.而如果想要扩展功能即增加功能,只需要添加相应的相应的新的功能类,修改中间的抽象类即可,并不用修改使用者部分的代码.并且功能提供者的代码可以复用.而且使得程序更容易理解. 简单工厂模式介绍 一.什么是简单工厂模式? 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个子类(这些子类继承  自一个父类或接口)的实例. 二.简单工厂模式包含的角色: 1.工厂角色(工厂类): 它负责创建所有