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)——工厂方法模式
工厂方法模式同样属于类的创建型模式又被称为多态工厂模式.工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中.核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色, ...
随机推荐
- 模拟搭建Web项目的真实运行环境(一)
序言 最近尝试完整搭建一个Web项目的运行环境,总结一下这几个月学到的知识点. 后面的文章主要包括一下几个内容: A. 搭建一个Linux服务器,用来部署Redis.Mongo等数据存储环境: B. ...
- C++ 基础知识复习(五)
UML建模部分 70. 什么是UML: 答: Unified Modeling Language, 统一建模语言,是一种标准的图形化建模语言.是面向对象分析和设计的标准表示. 71. UML有哪些图: ...
- flume+kafka+hbase+ELK
一.架构方案如下图: 二.各个组件的安装方案如下: 1).zookeeper+kafka http://www.cnblogs.com/super-d2/p/4534323.html 2)hbase ...
- [Android]Android开发入门之HelloWorld
引言:在做Unity开发的时候,发现这么个问题,虽然Unity是跨平台的,能够进行Android,IOS,Web,PC等开发,但如果要实现一些稍微系统层的东西,还是需要通过通信,调用原系统的接口(自定 ...
- php调试
转自:http://www.cnblogs.com/gidot/p/4307709.html
- 分享Kali Linux 2016.2第50周镜像文件
分享Kali Linux 2016.2第50周镜像文件Kali Linux官方于12月11日发布Kali Linux 2016.2的第50周镜像.这次保持以往规律,仍然是11个镜像文件.默认的Gnom ...
- dedecms在列表或首页取得文章首图的功能改进
在网上找过资料,效果不是很满意,第一个是原理说的不对,第二个是后缀写死. 原文大致如下: 当文章缩略图是自动选取文章内第一个图片裁减所得时 他的命名规则是有规律的 比如原文是1.jpg 它对应的缩略图 ...
- 虚拟主机Dede程序安装
1. 在网上下载最新版本DedeCMS 2. 将Dede程序通过FTP上传到主机上的htdocs目录. 3. 在主机控制台将程序解压到根目录. 4. 将解压后的 upload 目录下的文件全部移动到 ...
- zorka源码解读之Beanshell与zorka的交互实现
一.beanshell基础知识从应用程序中调用BeanShell创建一个BeanShell的解释器(interpreter)用eval()和source()命令可以对一个字符串求值和运行一个脚本文件使 ...
- Leetcode Simplify Path
Given an absolute path for a file (Unix-style), simplify it. For example,path = "/home/", ...