Java工厂模式

1. 简单工厂模式
[code]
publci class Sample{
....
}

public class A extends Sample{
....
}

public class B extends Sample{
......
}
[/code]
工厂类处于决定实例化那个产品类的中心位置
[code]
public class Factory{

//静态工厂方法,无必要再去实例化这个工厂类,增加没有必要的代码
public static Sample create(int which){
if(which==1)
return new A();
if(which==2)
return new B();
}
}
[/code]
使用简单工厂初始化一个类
[code]
Sample newSample=Factory.create(1);
[/code]

2. 工厂方法模式
植物接口及两个实现类
[code]
public interface Plant{}

public class PlantA implements Plant{
}

public class PlantB implements Plant{
}
[/code]

水果接口及两个实现类
[code]
public interface Fruit{}

public class FruitA implements Fruit{
}

public class FruitB implements Fruit{
}
[/code]

抽象工厂
[code]
public interface AbstractFactory{
public Plant createPlant();
public Fruit creatFruit();
}
[/code]

工厂类A
[code]
public Class FactoryA implements AbstractFactory{
public Plant createPlant(){
return new PlantA();
}
public Fruit creatFruit(){
return new FruitA();
}
}
[/code]
工厂类B
[code]
public Class FactoryB implements AbstractFactory{
public Plant createPlant(){
return new PlantB();
}
public Fruit creatFruit(){
return new FruitB();
}
}
[/code]
工厂方法模式与简单工厂模式再结构上的不同不是很明显。工厂方法类的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上。

  工厂方法模式之所以有一个别名叫多态性工厂模式是因为具体工厂类都有共同的接口,或者有共同的抽象父类。

  当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体对象以及一个具体工厂对象,原有工厂对象不需要进行任何修改,也不需要修改客户端,很好的符合了"开放-封闭"原则。而简单工厂模式在添加新产品对象后不得不修改工厂方法,扩展性不好。

  工厂方法模式退化后可以演变成简单工厂模式。

新增加一个类PlantC 和 FruitC
[code]
public class PlantC implements Plant{
}
public class FruitC implements Fruit{
}
[/code]
这时只需要增加一个工厂类C
[code]
public Class FactoryC implements AbstractFactory{
public Plant createPlant(){
return new PlantC();
}
public Fruit creatFruit(){
return new FruitC();
}
}
[/code]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java工厂模式是一种创建对象的设计模式,它提供了一种将对象的创建与使用分离的方式。通过使用工厂模式,我们可以通过调用工厂类的方法来创建对象,而不需要直接使用new关键字实例化对象。 在Java中,工厂模式通常包括以下几个角色: 1. 抽象产品(Product):定义了产品的接口,是具体产品类的父类或接口。 2. 具体产品(Concrete Product):实现了抽象产品接口的具体类。 3. 抽象工厂(Abstract Factory):定义了创建产品的接口,可以是抽象类或接口。 4. 具体工厂(Concrete Factory):实现了抽象工厂接口,负责创建具体产品的对象。 下面是一个简单的Java工厂模式实例: 首先,我们定义一个抽象产品接口(Product): ```java public interface Product { void use(); } ``` 然后,我们定义两个具体产品类(Concrete Product)实现抽象产品接口: ```java public class ConcreteProductA implements Product { @Override public void use() { System.out.println("使用产品A"); } } public class ConcreteProductB implements Product { @Override public void use() { System.out.println("使用产品B"); } } ``` 接下来,我们定义一个抽象工厂接口(Abstract Factory): ```java public interface Factory { Product createProduct(); } ``` 然后,我们定义两个具体工厂类(Concrete Factory)实现抽象工厂接口: ```java public class ConcreteFactoryA implements Factory { @Override public Product createProduct() { return new ConcreteProductA(); } } public class ConcreteFactoryB implements Factory { @Override public Product createProduct() { return new ConcreteProductB(); } } ``` 最后,我们可以使用具体工厂来创建具体产品对象: ```java public class Main { public static void main(String[] args) { Factory factoryA = new ConcreteFactoryA(); Product productA = factoryA.createProduct(); productA.use(); Factory factoryB = new ConcreteFactoryB(); Product productB = factoryB.createProduct(); productB.use(); } } ``` 这样,通过工厂模式,我们可以通过调用具体工厂的方法来创建具体产品的对象,而不需要直接使用new关键字实例化对象。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值