JAVA 设计模式二之工厂模式

目录

一.分类

二.详解

1.简单工厂模式

2.工厂方法模式

3.抽象工厂模式

三.工厂模式在jdk中的使用

四.工厂模式小结


一.分类

1.简单工厂模式

2.工厂方法模式

3.抽象工厂模式

二.详解

1.简单工厂模式

基本介绍

1) 简单工厂模式是属于创建型模式,是工厂模式的一种。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族种最简单实用的模式

2)简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行为(代码)

3)在软件开发中,当我们会用到大量的创建某种、某类或者某批对象时,就会使用到工厂模式

 

简单工厂模式就是把对类的创建初始化全都交给一个工厂来执行,而用户不需要去关心创建的过程是什么样的,只用告诉工厂我想要什么就行了。而这种方法的缺点也很明显,违背了设计模式的开闭原则,因为如果你要增加工厂可以初始化的类的时候,你必须对工厂进行改建

interface Phone{
    public void getPhone();
}
public class Iphone implements Phone{
    @Override
    public void getPhone(){
        System.out.println("苹果手机生产出来了")
    }
}
public class HuaWei implements Phone{
     @Override
     public void getPhone(){
         System.out.println("华为手机生产出来了")
     }
 }
public class SimplePhoneFactory{
      public static Phone phoneFactory(Class<?> class){
          if(class.getName().equals(Iphone.class.getName())){
              return new Iphone();
          }
           if(class.getName().equals(HuaWei.class.getName())){
              return new HuaWei();
          }
          return null;
      }
  }
public class TestSimpleFactory{
    public static void main(String[] args){
     Phone phone = SimplePhoneFactory.phoneFactory(HuaWei.class);
     phone.getPhone();
    }
}

2.工厂方法模式

定义一个创建对象的抽象方法,由子类决定要实例化的类。工厂方法模式将对象的实例化推迟到子类

 

 

设计一个工厂的接口,你想要什么东西,就写个类继承于这个工厂,这样就不用修改什么,直接添加就行了。就相当于,我这个工厂是用来生手机的,而要什么品牌的手机具体分到了每个生产车间,如果新多了一种品牌的手机,直接新增一个生产车间就行了。那么问题又来了,如果想要生产汽车怎么办?

interface Phone{
    public void getPhone();
}

public class Iphone implements Phone{
    @Override
    public void getPhone(){
        System.out.println("苹果手机生产出来了")
    }
}
 public class HuaWei implements Phone{
     @Override
     public void getPhone(){
         System.out.println("华为手机生产出来了")
     }
 }
//抽象工厂
interface PhoneFactory{
    public Phone getPhoneFactory();
}
class IphoneFactory implements PhoneFactory{
     @Override
     public Phone getPhoneFactory(){
         return new Iphone();
     }
 }
public HuaweiFactory implements PhoneFactory{
     @Override
     public Phone getPhoneFactory(){
         return new HuaWei();
     }
 }
public class TestFactory{
     public static void main(String[] args){
         Phone iphone = new IphoneFactory().getPhoneFactory();
         iphone.getPhone();
     }
 }

3.抽象工厂模式

基本介绍

1)抽象工厂模式:定义了一个interface用于创建相关或有依赖关系的对象族,而无需指明具体的类

2)抽象工厂模式可以将简单工厂模式和工厂方法模式进行整合

3)从设计层面看,抽象工厂模式就是对简单工厂模式的改进,或者称为进一步的抽象

4)将工厂抽象成两层,抽象工厂和具体实现的工厂子类,程序员可以根据创建对象类型使用对应的工厂子类。这样将单个的简单工厂类变成了工厂族,更利于代码的维护和扩展

定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。

  抽象工厂与工厂方法的区别,就在于产品簇的问题,多了一种产品,这时候怎么办呢,就是在接口类里面加上创建汽车的方法,然后每个手机车间就可以有两个子车间分别来生产手机和汽车。这样的话缺点也很显然的冒了出来,如果我又想生产飞机,那么我要需要更改所有的工厂车间以及工厂接口。

  抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。他与工厂方法模式的区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则是针对的多个产品等级结构。在编程中,通常一个产品结构,表现为一个接口或者抽象类,也就是说,工厂方法模式提供的所有产品都是衍生自同一个接口或抽象类,而抽象工厂模式所提供的产品则是衍生自不同的接口或抽象类。

interface Phone{
    public void getPhone();
}
public class Iphone implements Phone{
    @Override
    public void getPhone(){
        System.out.println("苹果手机生产出来了")
    }
}
public class HuaWei implements Phone{
     @Override
     public void getPhone(){
         System.out.println("华为手机生产出来了")
     }
 }
interface Car{
    public void getCar();
}
public class BydCar implements Car{
    @Override
    public void getCar(){
        System.out.println("生产一辆比亚迪汽车");
    }
}
public class BydCarPro implements Car{
     @Override
     public void getCar(){
         System.out.println("生产一辆比亚迪升级版汽车");
     }
 }
//抽象工厂
interface Factory{
    public Phone getPhoneFactory();
    public Car getCarFactory();
}
 //具体工厂类
 class FactoryOne implements Factory{
     @Override
     public Phone getPhoneFactory(){
         return new Iphone();
     }
     
     @Override
     public Car getCarFactory(){
         return new BydCar();
     }
 }

//具体工厂类
class FactoryTwo implements Factory{
    @Override
    public Phone getPhoneFactory(){
        return new HuaWei();
    }
    @Override
    public Car getCarFactory(){
        return new BydCarPro();
    }
}
public class TestFactory{
    public static void main(String[] args){
     Phone iphone = new FactoryOne().getPhoneFactory();
     iphone.getPhone();
     Car bydPro = new FactoryTwo().getCarFactory();
     bydPro.getCar();
        
    }
}

三.工厂模式在jdk中的使用

jdk中的calendar类中,就使用了简单工厂模式

Calendar instance = Calendar.getInstance();

 

四.工厂模式小结

1)工厂模式的意义

将实例化对象的代码提取出来,放到一个类中统一管理和维护,达到和主项目的依赖关系的解耦,从而提高项目的扩展和维护性

2)三种工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)

3)设计模式的依赖抽象原则

(1)创建对象实例时,不要直接new类,而是把这个new类的动作放在一个工厂的方法中,并返回

(2)不要让类继承具体类,而是继承抽象类或者是实现interface

(3)不要覆盖基类中已经实现的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值