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)——工厂方法模式
		
工厂方法模式同样属于类的创建型模式又被称为多态工厂模式.工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中.核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色, ...
 
随机推荐
- 动态选路、RIP协议&&OSPF协议详解
			
动态选路.RIP协议&&OSPF协议详解 概念 当相邻路由器之间进行通信,以告知对方每个路由器当前所连接的网络,这时就出现了动态选路.路由器之间必须采用选路协议进行通信,这样的选路协议 ...
 - eclipse远程连接hive
			
创建项目,添加jar包,hive的s上,所以也需要hadoop的一些jar 这个图片是从网上找的,我直接使用的以前hadoop的项目 创建测试类,写测试代码 //获取jdbc链接 private ...
 - js获取当前对象的颜色判断改变颜色
			
function toHex(N) { if (N==null) return "00"; N=parseInt(N); if (N==0 || isNaN(N)) return ...
 - CompletionService/ExecutorCompletionService/线程池/concurrent包
			
线程池 线程池的基本思想:线程频繁的创建.销毁会极大地占用系统资源,为了减少系统在创建销毁线程时的开销,线程池应运而生.线程池包括多个已创建的线程,当有任务要在新线程中执行时,将任务提交给线程池,线程 ...
 - 转换一个矩阵(2维数组)为HTML Table
			
matrix[row][col],比如[ [ "Name", "Age" ], [ "Sam", 12 ] ] function (m) { ...
 - JAVA Day11
			
接口 interface public interface Demo { public abstract void demo(); } 接口中的方法全部都是抽象的. 接口的特性 接口不可以被实例化 ...
 - HDU5900 QSC and Master(区间DP + 最小费用最大流)
			
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5900 Description Every school has some legends, ...
 - 探索摸寻之XCode 快捷键
			
注释/反注释 Command+/ 模拟器没有Home键 在模拟器的应用界面 Command+Shift+h 返回上一级 (1920,24寸显示器,因此不是分辨率问题)
 - css position的使用
			
css position的使用 css 的 position 属性是用来设置元素的位置的,它还能设置一个元素出现在另一个元素的下层元素能用 top,bottom,left 和 right 属性设置位置 ...
 - 【二分】POJ 2109
			
谁骗我这是贪心TT 大概就是求k的n次方等于p时的k(k到10^9),由于,p的数据到了10^101,n到200,所以直接算估计T ?? 反正看完想到二分,其实数据要是再大点估计我这个二分不行. 网上 ...