永发信息网

Java的几个工厂方法解析

答案:1  悬赏:20  手机版
解决时间 2021-01-17 02:36
Java的几个工厂方法解析
最佳答案
Java工厂模式可分为三种:
1.静态工厂模式
2.工厂方法模式
3.抽象工厂模式
一、静态工厂模式:用静态的方法实现,其创建的对象具有一定的特性
举例如下:
Vehicle类:
public abstract class Vehicle
{
private String name;

public Vehicle (){
super();
}
public Vehicle (String name){
super();
this.name=name;
}
public abstract void run();
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
}

Bus类:
public class Bus extends Vehicle
{
private String name;

public Bus(){}
public Bus(String name){
super(name);
}
@Override
public abstract void run(){
System.out.println("Bus is running");
}
}

Car类:
public class Car extends Vehicle
{
private String name;

public Car(){}
public Car(String name){
super(name);
}
@Override
public abstract void run(){
System.out.println("Car is running");
}
}

静态工厂类:
(静态工厂创建一个对象,
静态工厂创建的对象一般都有一个共同的特性,
继承自某一个类,
或者引用一个接口)

public class StaticFactory{
public static Object getInstance(String className){
Object instance=null;
try{
Class c=Class.forName(className);
instance=c.newInstance();
}catch(Exception e){}
return instance;
}

public static Object getInstance(String className,Object ...args){
Class c=null;
try{
c=Class.forName(className);
}catch(Exception e){}
Constructor[] cons=c.getConstructors();
Object instance=null;
for(Constructor con:cons){
Class[] cs=con.getParmeterTypes();
if(cs.length>0){
boolean isConstructor=true;
for(int i=0;iClass t=cs[i];
if(!t.isInstance(args[i])){
isConstructor=false;
}
}
if(isConstructor){
try{
instance=con.newInstance(args);
break;
}catch(Exception e){}
}else{
continue;
}
}
}
return instance;
}
}

二、工厂方法模式:主要是对各类东西分类生产,但分类生产的对象仍然具有某一特性。
如果说静态工厂是一个综合的交通工具建造工厂,
那么工厂方法模式就是具体分工,分成Bus与Car的工厂,
各自生产各自的产品,但是造出来的还是交通工具。

交通工具制造接口:
public interface VehicleMake{

public Vehicle make();
}

Bus制造类:
public class BusMake implements VehicleMake{
@Override
public Vehicle make(){
Vehicle bus=new Bus();
System.out.println("Bus工厂制造了一辆Bus");
return bus;
}
}

Car制造类:
public class CarMake implements VehicleMake{
@Override
public Vehicle make(){
Vehicle car=new Car();
System.out.println("Car工厂制造了一辆Car");
return car;
}
}

三、抽象工厂模式:抽象工厂生产的对象可能是没有共同特性的。比如,一个制造工厂BusMake不仅能制造Bus还能生产轮胎wheel等配件,Bus是交通工具,wheel是配件(代码中有部分类没具体写出来只给了类名)

总工厂(抽象工厂总接口):
public interface WheelVehicleMake extends VehicleMake{

public Wheel makeWheel();
}

轮子BusMake:
public class WheelBusMake implements WheelVehicleMake{
@Override
public Vehicle make(){
Vehicle bus=new Bus();
System.out.println("WheelBusMake生产了一辆Bus");
return bus;
}
@Override
public Wheel makeWheel(){
Wheel busWheel=new BusWheel();
System.out.println("WheelBusMake生产了一个Bus轮子");
return busWheel;
}
}

轮子CarMake:
public class WheelCarMake implements WheelVehicleMake{
@Override
public Vehicle make(){
Vehicle car=new Car();
System.out.println("WheelCarMake生产了一辆Car");
return car;
}
@Override
public Wheel makeWheel(){
Wheel carWheel=new CarWheel();
System.out.println("WheelCarMake生产了一个Car轮子");
return carWheel;
}
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
乙酰水杨酸即阿司匹林,可通过水杨酸与乙酸酐
在你贫穷的时候我在你身边,在你富有的时候我
金陵夜寂凉风发,独上高楼望吴越的意思
Ipad腾讯视频里的视频怎么缓存超清? 怎么按
如果白天把大型犬带出去会怎么样
富豪太太接女儿上学,被误当保姆,是什么电视
怎样才能看区气门是液压气门
佳能1dx2和中画幅哪个好
70+100分之六该怎么算
四川兴阳电力设计咨询有限公司
一亿亿的人民币需要多大空间能装下?
下列实验中,实验操作、实验现象和实验结论均
使用XmlSerializer序列化对象时,如何将对象
如图,已知抛物线y=ax2+bx+c(a≠0)经过A(
柒牌的这款休闲裤价格是多少。我要的是标牌的
推荐资讯
英雄不问出处的下一句是什么
什么是无基材胶带
怎么区分AMD CPU是多少针的?
求大神解答啊
如何妥善解决城市新贫困人口的居住问题
竹子外表打蜡可以保持光亮不
工程测量专业的就业方向
尸体从外地如何运回家
报考条件必须是有消防资质的单位吗
为什么我i58代mx150内测八g玩lol都卡
单选题18世纪后半期,世界上最强大的殖民国家
(1)我国北方地区和南方地区的分界线大致是_
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?