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)——工厂方法模式
工厂方法模式同样属于类的创建型模式又被称为多态工厂模式.工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中.核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色, ...
随机推荐
- 图像处理中的matlab使用
图像的矩阵表示 类和图像类型 虽然使用的是整数坐标, 但 MATLAB 中的像素值(亮度)并未限制为整数. 表 1-1 列出了 MATLAB 和图像处理工具箱为描述像素值而支持的各种类. 表中的前 8 ...
- 【Java EE 学习 49 上】【Spring学习第一天】【基本配置】
一.HelloWorld 需要的jar文件(以2.5.5为例):spring.jar,common-logging.jar 1.新建类com.kdyzm.spring.helloworld.Hello ...
- 在visual studio2015中使用easyX画图
配置:解压EasyX压缩包: 将文件内的include,lib,lib/amd64下的文件拷贝到visualstudio中VC文件夹内对应的地方: 然后再执行上图中的Setup.hta进行安装: 在v ...
- Daily Scrum Meeting ——NinthDay
一.Daily Scrum Meeting照片 二.Burndown Chart 三.项目进展 1.用户管理 2.下拉框与界面的整合 四.问题困难 黄志明(PM):Android Studio自带的S ...
- sql 动态行转列
create table u01 (医案编号 varchar(5),药物编号 varchar(5)) insert into u01 select '01','01' union all select ...
- 【BZOJ2318】Spoj4060 game with probability Problem 概率
[BZOJ2318]Spoj4060 game with probability Problem Description Alice和Bob在玩一个游戏.有n个石子在这里,Alice和Bob轮流投掷硬 ...
- Theano:LSTM源码解析
最难读的Theano代码 这份LSTM代码的作者,感觉和前面Tutorial代码作者不是同一个人.对于Theano.Python的手法使用得非常娴熟. 尤其是在两重并行设计上: ①LSTM各个门之间并 ...
- PHP图片裁剪类
<?php class ImageTool { //以宽为标准,如果小于宽,则不剪裁 public static function thumb_img_by_width($src_path, $ ...
- CSS3中的变形与动画【转】
最近在学习制作移动端的页面,做了一个微信页面的小demo,其中用到了很多的CSS3新增的内容,其中就有CSS3新增的变形和动画.其实这种CSS3的动画效果用JS也可以实现,不过CSS3能开启硬件加速, ...
- 02.JavaScript基础下
运算符 算术:+ 加.- 减.* 乘./ 除.% 取模 实例:隔行变色.秒转时间 赋值:=.+=.-=.*=./=.%= 关系:<.>.<=.>=.==.===.!=(不等). ...