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)——工厂方法模式
工厂方法模式同样属于类的创建型模式又被称为多态工厂模式.工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中.核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色, ...
随机推荐
- ionic扩展插件
1.ionic-timepicker 时间选择 https://github.com/rajeshwarpatlolla/ionic-timepicker 2.ionic-datepicker 日 ...
- AngularJS的JSONP服务
有些页面的response中,包含了 Access-Control-Allow-Origin 这个header,说明可以进行跨域请求,如果没有包含这个header的页面可以利用JSONP进行跨域 sc ...
- iOS开发多线程篇 — GCD的常见用法
一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) withObject:nil ...
- mybatis动态sql
MyBatis 采用功能强大的基于 OGNL 的表达式来消除其他元素. if choose(when,otherwise) trim(where,set) foreach 例子(2): &l ...
- LeetCode之412. Fizz Buzz
-------------------------------------------- 虽然是从最简单的开始刷起,但木有想到LeetCode上也有这么水的题目啊... AC代码: public cl ...
- SpringMVC学习(二)
SpringMVC入门(注解方式) 需求 实现商品查询列表功能. 第一步:创建Web项目 springmvc02 第二步:导入jar包 第三步:配置前端控制器 在WEB-INF\web.xml中配置前 ...
- Jetty使用教程(四:23)—Jetty开发指南
二十三.Maven和Jetty 这一章节将说明如何通过Maven管理Jetty和使用Jetty的Maven插件. 23.1 使用Maven Apache Maven是一个款软件项目管理工具.基于项目对 ...
- Win10 UWP vs add github
vs github 插件 教程 官方教程 点击查看存储库,跳转到 DemoHttp for github
- display:box和display:inline-box的区别
display:box我想大家很熟悉,那么display:inline-box呢,今天在项目中需要设置这样的属性box-align:center,那么就想到用 display:box;如果设置BOX, ...
- Excel转Json,Json转CSharp
一份给策划最好的礼物!就是:Excel2Json2CSharp 策划配置Excel,动不动就要改数值啊,增加字段啊. 程序这边对应的解析类就得改动啊.整一个麻烦了得! 所以我就整理了这个Excel2J ...