简单工厂模式简单工厂模式
功能:
简单工厂模式又称静态工厂模式,用来实例化目标类的静态类。
实例:
a、说明:
1
、(接口)汽车
Car
里有
2
个抽象方法
开车
停车
2
、造一个奔驰
Benz
1
)实现
Car
接口
2
)覆盖
car
的抽象方法
开车
停车
3
、再造一个伏特车
Ford
同样实现
car
接口和覆盖接口的方法
4
、实例化对象
5
、弊端
/******************************/
//
调用奔驰
Car b...
简单工厂模式
功能:
简单工厂模式又称静态工厂模式,用来实例化目标类的静态类。
实例:
a、说明:
1
、(接口)汽车
Car
里有
2
个抽象方法
开车
停车
2
、造一个奔驰
Benz
1
)实现
Car
接口
2
)覆盖
car
的抽象方法
开车
停车
3
、再造一个伏特车
Ford
同样实现
car
接口和覆盖接口的方法
4
、实例化对象
5
、弊端
/******************************/
//
调用奔驰
Car benz = new Benz();
benz.run();
//
调用伏特
Car ford = new Ford();
ford.run();
/******************************/
都要使用
Car
不论奔驰和伏特都与
Car
紧密耦合了,,,,
6
、中间加一个工厂类
专门为客户端实例化一个对象
/******************************/
//
加一个工厂类,为客户端实例化一个对象
class Factory{
//
public static Car getCarInstance(){
//return new Benz();
//
实例化伏特
return new Ford();
}
}
/******************************/
7
、
main
方法既要实例化奔驰,又要实例化伏特
修改静态工厂的方法,给它添加参数
8
、如果用户希望工厂能创造用户想要的汽车,输入参数在工厂中没有
则要增加一个对实例对象的判断;
空指针
9
、如果又扩充子类而不用去修改工厂的办法
用
java
的反射
替换
if
判断
Class.forName( designPatterns.factorydemo3. +type).newInstance()
然后强制转化为
Car
型
Car c=null;
try {
c = (Car)Class.forName( designPatterns.factorydemo3. +type).newInstance();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return c;
b、代码1
*******************************************************
package designPatterns.factorydemo.simplefactory;
//车类型
interface Car{
public void run();; public void stop();; }
//第一种车
class Benz implements Car{
public void run(){ System.out.println( 奔驰开动了~ ); }
public void stop(){ System.out.println( 奔驰停了~ ); }
}
//第二种车
class Ford implements Car{
public void run(){ System.out.println( 伏特开动了~ ); }
public void stop(){ System.out.println( 伏特停了~ ); }
}
//加一个工厂类,为客户端实例化一个对象 class Factory{
//
public static Car getCarInstance(){
//return new Benz();
//实例化伏特
return new Ford();
}
}
public class SimpleFactorydemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub /**
* 没有使用工厂模式时,即没有添加工厂类Factory时*/ //错误的
//Benz benz = new Benz(); //benz.run();
//调用奔驰
//Car benz = new Benz();
//benz.run();
////调用伏特
//Car ford = new Ford();
//ford.run();
//
/**
* 添加了Factory类后*/
Car benz = Factory.getCarInstance(); benz.run();
benz.stop();
//客户端不能选择
}
}
********************************************************
c、代码2:
如果用户希望工厂能创造用户想要的汽车,输入参数在工厂中没有
则要增加一个对实例对象的判断;
*******************************************************
package designPatterns.factorydemo2;
//车类型
interface Car{
public void run();; public void stop();; }
//第一种车
class Benz implements Car{ public void run(){
System.out.println( 奔驰开动了~ ); }
public void stop(){ System.out.println( 奔驰停了~ );
}
}
//第二种车
class Ford implements Car{ public void run(){
System.out.println( 伏特开动了~ ); }
public void stop(){ System.out.println( 伏特停了~ );
}
}
//加一个工厂类,为客户端实例化一个对象 class Factory{
//
public static Car getCarInstance(String type){
//return new Benz();
//实例化伏特
//return new Ford();
Car c=null;
if(type.endsWith( Benz ))
c= new Benz();
else if(type.endsWith( Ford )) c= new Ford();
return c;
}
}
public class SimpleFactorydemo2 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Car benz = Factory.getCarInstance( Benz );
benz.run();
benz.stop();
Car ford = Factory.getCarInstance( Ford );
ford.run();
ford.stop();
//如果创建一个自己的车,则要判断工厂里面是否有
Car me = Factory.getCarInstance( adfjakljf );
if(me!=null)
{
me.run();
me.stop();
}
else{
System.out.println( 造不了这种类型的车 );
}
}
}
*******************************************************
e、代码3:利用java的反射机制来 解决扩充子类不去修改工厂
********************************************************
package designPatterns.factorydemo3;
//车类型
interface Car{
public void run();;
public void stop();;
}
//第一种车
class Benz implements Car{ public void run(){
System.out.println( 奔驰开动了~ );
}
public void stop(){
System.out.println( 奔驰停了~ );
}
}
//第二种车
class Ford implements Car{ public void run(){
System.out.println( 伏特开动了~ );
}
public void stop(){
System.out.println( 伏特停了~ );
}
}
//扩充的车
class Toyoto implements Car{ public void run(){
System.out.println( 丰田开动了~ );
}
public void stop(){
System.out.println( 丰田停了~ );
}
}
//加一个工厂类,为客户端实例化一个对象
class Factory{
//
public static Car getCarInstance(String type){
//return new Benz();
//实例化伏特
//return new Ford();
//Car c=null;
//if(type.endsWith( Benz )) //c= new Benz();
//else if(type.endsWith( Ford )) //c= new Ford();
//return c;
Car c=null;
try {
c = (Car)Class.forName( designPatterns.factorydemo3. +type).newInstance();
} catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace();
} catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace();
} catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace();
}
return c;
}
}
public class SimpleFatorydemo3 {
/**
* @param args
*/
public static void main(String[] args) { // TODO Auto-generated method stub //如果创建一个自己的车,则要判断工厂里面是否有
Car me = Factory.getCarInstance( Toyoto );
if(me!=null)
{
me.run();
me.stop();
}
else{
System.out.println( 造不了这种类型的车 );
}
}
}
*******************************************************
本文档为【简单工厂模式】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。