一.定义:将对象的创建和使用解耦,使用单独工厂类来创建对象;
二.工厂模式的几种实现
本文提到的四种工厂模式是不断优化改进的结果
1.简单工厂模式
interface Animal{
void eat();
}
class Dog implements Animal{
@Override
public void eat(){
System.out.println("Dog eat bone!");
}
}
class Cat implements Animal{
@Override
public void eat(){
System.out.println("Cat eat fish!");
}
}
class Factory{
public Animal getAnimal(String s){
if(s=="Dog"){
return new Dog();
}
else if(s=="Cat"){
return new Cat();
}
else{
System.out.println("Please input correct animal name!");
return null;
}
}
}
public class FactoryPattern {
public static void main(String[] args){
Factory factory=new Factory();
Animal dog=factory.getAnimal("Dog");
dog.eat();
}
}
问题:简单工厂模式在创建对象时需要输入对象的名字,如果错误则无法创建对象,需要改进;
2. 工厂方法模式
interface Animal{
void eat();
}
class Dog implements Animal{
@Override
public void eat(){
System.out.println("Dog eat bone!");
}
}
class Cat implements Animal{
@Override
public void eat(){
System.out.println("Cat eat fish!");
}
}
class Factory{
public Animal getDog(){
return new Dog();
}
public Animal getCat(){
return new Cat();
}
}
public class FactoryMethod {
public static void main(String[] args) {
// TODO Auto-generated method stub
Factory factory=new Factory();
Animal dog=factory.getDog();
dog.eat();
}
}
工厂方法模式在工厂类中增加了不同方法来创建相应的对象.
3. 静态工厂模式:将工厂方法模式中的方法改为静态方法即可.实际常使用静态工厂模式.
工厂方法模式和静态工厂模式都存在一个问题,即每次扩展时,均需要修改工厂类,增加方法来创建相应的对象,违反了开闭原则
4. 抽象工厂模式:
抽象工厂模式是增加一个工厂类的接口AnimalFactory,该接口存在一个方法来产生Animal对象;当程序扩展需要增加一个实现了Animal接口的类时(如Cow),同时需要增加一个实现AnimalFactory接口的工厂类,来产生相应的对象,符合”开闭原则”的要求.
interface Animal{
void eat();
}
class Dog implements Animal{
@Override
public void eat(){
System.out.println("Dog eat bone!");
}
}
class Cat implements Animal{
@Override
public void eat(){
System.out.println("Cat eat fish!");
}
}
interface AnimalFactory{
Animal getAnimal();
}
class DogFactory implements AnimalFactory{
public Animal getAnimal(){
return new Dog();
}
}
class CatFactory implements AnimalFactory{
public Animal getAnimal(){
return new Cat();
}
}
public class AbstractFactoryPattern {
public static void main(String[] args) {
// TODO Auto-generated method stub
DogFactory df=new DogFactory();
Animal dog=df.getAnimal();
dog.eat();
}
}
三.工厂模式的优点
1.代码解耦 将对象的创建和使用解耦,
2.降低代码重复 如果对象创建非常复杂,且需要多次创建,将创建方法放入工厂中,降低代码重复,同时便于管理
四.使用场景
1.对象创建过程非常复杂,初始化内容较多;
2.对象使用频繁,且创建过程需要多次修改;
工厂模式的作用,这篇文章讲解的不错
https://blog.youkuaiyun.com/q89757316/article/details/80233864
2362

被折叠的 条评论
为什么被折叠?



