设计模式之工厂模式

什么是工厂模式

工厂设计模式:它是一种创建型模式。工厂模式可以帮我们创建对象,去代替new操作的一种设计模式。将实例化对象的代码提取出来,放到一个类中统一管理喝维护,到达著项目的依赖关系的解耦。从而提高项目的扩展和维护性。

工厂设计模式:

  • 工厂方法模式(简单工厂模式是工厂方法模式的特例)。
  • 抽象工厂模式。

简单工厂模式

简单工厂模式的UML类图:
在这里插入图片描述

代码设计:

产品类:

//抽象产品类
public abstract class AoDi {
    public AoDi(){}
}

//具体产品类
public class AoDiA6 extends AoDi {
    public AoDiA6(){
        System.out.println("生产AoDiA6");
    }
}

public class AoDiA8 extends AoDi {
    public AoDiA8(){
        System.out.println("生产AoDiA8");
    }
}

工厂类:

public class FactoryCar {
	//根据用户的要求创建车辆。
    public AoDi createAoDi(String name){
        if ("A6".equals(name)){
            return new AoDiA6();
        }
        if ("A8".equals(name)){
            return new AoDiA6();
        }
        return null;
    }
}

**注意:**当用户需要另外一种型号车时,都要在工厂类相应的逻辑代码,工厂类很被动,这样的工厂类成为全能类或者上帝类。。违反了开闭原理。

工厂方法模式

工厂方法模式使用继承自抽象工厂角色的多个子类来代替简单工厂模式中的上帝类,分担了对象承受的压力。

代码设计:

产品类:

//抽象产品
public abstract class AoDi {
    public AoDi(){

    }
}

具体产品类
public class AoDiA6 extends AoDi {
    public AoDiA6(){
        System.out.println("生产AoDiA6");
    }
}

public class AoDiSuv extends AoDi {
    public AoDiSuv(){
        System.out.println("生产了奥迪SUV");
    }
}

工厂类:

//抽象工厂类
public  abstract class FactoryCar {
    /**
     * 生产汽车
     * @return
     */
    abstract AoDi createCar();
}
//具体工厂类
public class Factory01  extends FactoryCar{

    @Override
    AoDi createCar() {
        return new AoDiSuv();
    }
}

public class Factory02 extends FactoryCar {
    @Override
    AoDi createCar() {
        return new AoDiA6();
    }
}

**注意:**想生产新的系列的车,就创建一个工厂去实现。工厂方法把简单工厂的内部逻辑移到了客户端代码来执行。定义了一个抽象的工厂,由子类去决定实例化的类。将对象的实例化推迟到子类。

抽象工厂模式

抽象工厂方法就是一个工厂里生产不同等级结构中的一个(其中一种车)中的不同的配件(不同的车的属性)。

代码设计:
产品类:

//抽象产品类
public abstract Engine {    
  
} 

public abstract Aircondition {    
  
}

//具体产品类
public class EngineA extends Engine{    
    public EngineA(){    
        System.out.println("制造-->EngineA");    
    }    
} 
public class EngineB extends Engine{    
    public EngineB(){    
        System.out.println("制造-->EngineB");    
    }    
} 
public class AirconditionA extends Aircondition{    
    public AirconditionA(){    
        System.out.println("制造-->AirconditionA");    
    }    
} 
public class AirconditionB extends Aircondition{    
    public AirconditionB(){    
        System.out.println("制造-->AirconditionB");    
    }    
}

工厂类:

//一个工厂接口
public interface AbstractFactory {    
    //制造发动机  
    Engine createEngine();  
    //制造空调   
    Aircondition createAircondition();   
}  

//具体的工厂
public class factory1 implements AbstractFactory{    
        
    @Override    
    public Engine createEngine() {      
        return new EngineA();    
    }    
    @Override    
    public Aircondition createAircondition() {    
        return new AirconditionA();    
    }    
} 
public class factory2 implements AbstractFactory {    
    
     @Override    
    public Engine createEngine() {      
        return new EngineB();    
    }    
    @Override    
    public Aircondition createAircondition() {    
        return new AirconditionB();    
    }    
}

注意:定义了一个接口用于创建相关有依赖关系的对象族,而无需指明
具体的类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值