java设计模式之工厂方法探究

public class SimpleFactory {
public static void main(String[] args) {
Car car = CarFactory.createCar("Audi");
car.setBrand("Audi");
//生产
car.produce();
}
}
abstract class Car{
private String brand;
private String series;//暂时用不到
public abstract void produce();
public void setBrand(String brand) {
this.brand = brand;
}
public void setSeries(String series) {
this.series = series;
}
public String getBrand() {
return brand;
}
public String getSeries() {
return series;
}
}
//具体产品
class Audi extends Car{
public void produce(){
System.out.println("produce : " + this.getBrand());
}
}
class Bmw extends Car{
public void produce(){
System.out.println("produce : " + this.getBrand());
}
}
//简单工厂
class CarFactory {
public static Car createCar(String car){
Car c = null;
if("Audi".equalsIgnoreCase(car))
c = new Audi();
else if("Bmw".equalsIgnoreCase(car))
c = new Bmw();
return c;
}
}

public class FactoryMod {
@Test
public void test() {
CarFactory factory = new AudiFactory();
factory.createCar().produce();
}
abstract class Car{
private String brand;
private String series;//暂时用不到
public abstract void produce();
public void setBrand(String brand) {
this.brand = brand;
}
public void setSeries(String series) {
this.series = series;
}
public String getBrand() {
return brand;
}
public String getSeries() {
return series;
}
}
class Audi extends Car{
public void produce(){
System.out.println("produce : " + this.getBrand());
}
}
class Bmw extends Car{
public void produce(){
System.out.println("produce : " + this.getBrand());
}
}
class AudiFactory implements CarFactory{
public Car createCar(){
Car audi = new Audi();
audi.setBrand("audi");
return audi;
}
}
class BmwFactory implements CarFactory{
public Car createCar(){
Car bmw = new Bmw();
bmw.setBrand("bmw");
return bmw;
}
}
//工厂
interface CarFactory {
Car createCar();
}
}
class AudiFactory implements CarFactory{
public Car createCar(String series){
Car audi = new Audi();
audi.setBrand("audi");
audi.setSeries(series);
return audi;
}
}
class BmwFactory implements CarFactory{
public Car createCar(String series){
Car bmw = new Bmw();
bmw.setBrand("bmw");
bmw.setSeries(series);
return bmw;
}
}
//我指定汽车型号,客户端想要生产汽车的时候必须告诉我型号,然后我就可以给你相应型号的汽车。
interface CarFactory {
Car createCar(String series);
}
public class FactoryMod2 {
@Test
public void test() {
CarFactory factory = new AudiFactory();
factory.createCar().produce();//生产奥迪汽车
factory.createCar("A4").produce();//生产奥都A4
}
//汽车都有自己的序列号
abstract class Car {
private String id = String.valueOf(Math.random());
public String getId() { return id; }
public void setId(String id) { this.id = id; }
public abstract void produce();
}
//奥迪汽车还有自己的品牌名
class Audi extends Car {
private String brand = "Audi";
public void produce() {
System.out.println("produce : " + this.getBrand() + "," + this.getId());
}
public String getBrand() { return brand; }
}
//奥迪A4汽车除了品牌还有型号
class AudiA4 extends Audi {
private String series = "A4";
public void produce() {
System.out.println("produce : " + this.getBrand() + "," + this.getSeries() + "," + this.getId());
}
public String getSeries() { return series; }
}
class AudiA6 extends Audi {
private String series = "A6";
public void produce() {
System.out.println("produce : " + this.getBrand() + "," + this.getSeries() + "," + this.getId());
}
public String getSeries() { return series; }
}
class AudiFactory implements CarFactory {
//要判断客户要什么系列
public Car createCar(String series) {
Audi car = null;
if (series.equals("A4"))
return new AudiA4();
else if (series.equals("A6"))
return new AudiA4();
return null;
}
public Car createCar(){
return new Audi();
}
}
//简单工厂
interface CarFactory {
Car createCar(String series);
Car createCar();
}
}
produce :Audi,0.5005191840367693
produce :Audi,A4,0.1326089233983656
class AudiA4Factory implements CarFactory{
public Car createCar(){
return new AudiA4();
}
}
class AudiA6Factory implements CarFactory{
public Car createCar(){
return new AudiA6();
}
}



//抽象产品(Bmw和Audi同理)
abstract class BenzCar{
private String name; public abstract void drive(); public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
//具体产品(Bmw和Audi同理)
class BenzSportCar extends BenzCar{
public void drive(){
System.out.println(this.getName()+"----BenzSportCar-----------------------");
}
}
class BenzBusinessCar extends BenzCar{
public void drive(){
System.out.println(this.getName()+"----BenzBusinessCar-----------------------");
}
} abstract class BmwCar{
private String name; public abstract void drive(); public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class BmwSportCar extends BmwCar{
public void drive(){
System.out.println(this.getName()+"----BmwSportCar-----------------------");
}
}
class BmwBusinessCar extends BmwCar{
public void drive(){
System.out.println(this.getName()+"----BmwBusinessCar-----------------------");
}
} abstract class AudiCar{
private String name; public abstract void drive(); public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class AudiSportCar extends AudiCar{
public void drive(){
System.out.println(this.getName()+"----AudiSportCar-----------------------");
}
}
class AudiBusinessCar extends AudiCar{
public void drive(){
System.out.println(this.getName()+"----AudiBusinessCar-----------------------");
}
} //抽象工厂
abstract class Driver3{
public abstract BenzCar createBenzCar(String car) throws Exception; public abstract BmwCar createBmwCar(String car) throws Exception; public abstract AudiCar createAudiCar(String car) throws Exception;
}
//具体工厂
class SportDriver extends Driver3{
public BenzCar createBenzCar(String car) throws Exception {
return new BenzSportCar();
}
public BmwCar createBmwCar(String car) throws Exception {
return new BmwSportCar();
}
public AudiCar createAudiCar(String car) throws Exception {
return new AudiSportCar();
}
}
class BusinessDriver extends Driver3{
public BenzCar createBenzCar(String car) throws Exception {
return new BenzBusinessCar();
}
public BmwCar createBmwCar(String car) throws Exception {
return new BmwBusinessCar();
}
public AudiCar createAudiCar(String car) throws Exception {
return new AudiBusinessCar();
}
} //老板
public class BossAbstractFactory { public static void main(String[] args) throws Exception { Driver3 d = new BusinessDriver();
AudiCar car = d.createAudiCar("");
car.drive();
}
}
java设计模式之工厂方法探究的更多相关文章
- Java设计模式之工厂方法模式(转) 实现是抽象工厂?
Java设计模式之工厂方法模式 责任编辑:覃里作者:Java研究组织 2009-02-25 来源:IT168网站 文本Tag: 设计模式 Java [IT168 技术文章] ...
- Java设计模式系列-工厂方法模式
原创文章,转载请标注出处:<Java设计模式系列-工厂方法模式> 一.概述 工厂,就是生产产品的地方. 在Java设计模式中使用工厂的概念,那就是生成对象的地方了. 本来直接就能创建的对象 ...
- java设计模式(二)---工厂方法模式
2普通工厂方法模式 就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建. 2.1创建接口 /** * 发送接口 * Created by mrf on 2016/2/25. */ public ...
- Java设计模式 之 工厂方法模式
1. 使用设计模式的好处:可提高代码的重复性,让代码更容易被他人理解,保证代码的可靠性. 2. 工厂模式定义:就是创建一个工厂类来创建你需要的类,工厂模式包括工厂模式和抽象工厂模式,抽象工厂模式是工厂 ...
- JAVA设计模式之工厂方法模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述工厂方法模式的: 工厂方法模式是类的创建模式,又叫做虚拟构造子(Virtual Constructor)模式或者多态性工厂(Polymor ...
- Java 设计模式(四)-工厂方法模式 (FactoryMethod Pattern)
1 概念定义 1.1 定义 定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 1.2 类型 创建类模式 2 原理特征 2.1 类 ...
- 【java】 java 设计模式(1):工厂方法模式(Factory Method)
工厂方法模式分为三种: 1.普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建.首先看下关系图: 举例如下:(我们举一个发送邮件和短信的例子) 首先,创建二者的共同接口: p ...
- java设计模式学习 ----- 工厂方法模式(Factory Method)
工厂方法模式(Factory Method) 工厂方法模式分为三种:普通工厂模式.多个工厂方法模式.静态工厂方法模式 普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建. 关系图 ...
- Java设计模式(2)——工厂方法模式
工厂方法模式同样属于类的创建型模式又被称为多态工厂模式.工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中.核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色, ...
随机推荐
- 第一天:安装nodejs
1.首先,下载NodeJs程序.地址 http://www.nodejs.org/download/,选择Windows Installer 64bit 2.下载下来后,狂点下一步,安装在本地硬盘上. ...
- .NET中RabbitMQ的使用
概述 MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public ...
- 利用Queue队列实现FIFO的算法
#!/usr/bin/env python # -*- coding: utf-8 -*- # learn <<Problem Solving with Algorithms and Da ...
- 【转载】scribe、chukwa、kafka、flume日志系统对比
原文地址:http://www.ttlsa.com/log-system/scribe-chukwa-kafka-flume-log-system-contrast/ 1. 背景介绍许多公司的平台每天 ...
- Word中一些问题解决
word图片不显示或显示不全怎么办? http://jingyan.baidu.com/article/0f5fb099c5cb7a6d8334ea06.html
- java基础之——DecimalFormat格式化数字
DecimalFormat可以用来格式化数字,例如用来设定保留多少位小数.设定数字分隔符等. 说方法之前,先介绍一下其常用的几个模式占位符: 0 一个数字# 一个数字,不包括 0. 小数的分隔符的占位 ...
- 新的篇章--Python
这周已经开始Python的学习了,感觉Python类似于Powershell, 但又有不同点.在此总结一下新学到的资料: 简单的使用变量的方法: name= input("input you ...
- 编译原理-词法分析03-DFA
0.术语 DFA Deterministic finite automation,确定性有穷自动机.一般用于翻译正则表达式. 状态state DFA中的圆圈,表示模式在识别过程中的位置. 转换tran ...
- 【Linux】df命令 ,查看磁盘容量。
Oracle 导库时,失败,原因为磁盘满了, 记录下查看磁盘容量的指令 1.命令格式: df [选项] [文件] -a 全部文件系统列表 -h 方便阅读方式显示 -H 等于“-h”,但是计算式,1K= ...
- IOS网络第二天 - 04-黑酷-GDataXML 解析
****** - (void)viewDidLoad { [super viewDidLoad]; /** 加载服务器最新的视频信息 */ // 1.创建URL NSURL *url = HMUrl( ...