工厂模式
概念 : 定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子类当中.满足了创建模式中所要求的"创建与使用相分离"的特点
三种实现分类
- 简单工厂模式
- 工厂模式
- 抽象工厂模式
基本创建方式(不使用工厂模式)
代码实现
定义Phone的接口
package FactoryDemo.Simplefactory;
/**
* 定义实现手机接口
*/
public interface Phone {
/**
* 定义手机的功能方法
*/
public void call();
}
定义不同手机的实现类
## Huawei
package FactoryDemo.Simplefactory;
public class Huawei implements Phone {
@Override
public void call() {
System.out.println("我正在使用华为手机");
}
}
## Vivo
package FactoryDemo.Simplefactory;
public class Vivo implements Phone {
@Override
public void call() {
System.out.println("我正在使用Vivo手机...");
}
}
创建实现类
package FactoryDemo.Simplefactory;
/**
* 当我们不使用工厂模式的时候进行调用
* 需要对接口类,以及实现类的方法和参数了解,增加了创建对象的复杂和繁琐.
* 如果当有多个调用者调用Huawei类和vivo类的过程中此时被调用类的实现发生了改变(增加了新的成员)
* 则需要对所有的类new Huawei()/new Huawei()创建过程中进行改变.增加了功能扩展的代码量和繁琐
*/
public class Consumer {
public static void main(String[] args) {
Huawei huawei = new Huawei(); // 创建华为手机对象
Vivo vivo = new Vivo(); // 创建vivo手机对象
huawei.call(); // 调用接口方法
vivo.call();
}
}
简单工厂模式
概念 : 专门定义一个类创建其他类的实例,被创建实例的类型可能是接口,抽象类,也可以是具体类,实例化对象的时候不在使用new Object()
的形式,可以根据用户的需要创建相关的实例化对象.去除了调用者的创建类实例的依赖.
两种创建简单工厂的实现类
## 方式一
package FactoryDemo.Simplefactory;
/**
* 简单工厂模式创建对象
*/
public class PhoneFactory {
/**
* 调用者根据需要调用自己所需要的实现类
*/
public static Phone getPhoneObject(String type){
if("华为".equals(type)){
return new Huawei();
}else if("vivo".equals(type)){
return new Vivo();
} else {
return null;
}
}
}
## 方式二
package FactoryDemo.Simplefactory;
/**
* 简单工厂模式创建对象
*/
public class PhoneFactory2 {
public static Huawei createHuawei() {
return new Huawei();
}
public static Vivo createVivo() {
return new Vivo();
}
}
实现类的简单工厂模式创建
package FactoryDemo.Simplefactory;
public class Consumer2 {
public static void main(String[] args) {
// 不同的方式创建对象
Phone huawei = PhoneFactory.getPhoneObject("华为");
Phone vivo = PhoneFactory2.createVivo();
// 调用方法测试
huawei.call();
vivo.call();
}
}
工厂模式
概念 : 工厂方法模式是对简单工厂模式进一步的解耦,因为在工厂方法模式中一个子类对应一个工厂类,而这些工厂类都是实现与一个抽象接口.这相当于是把原本会因为业务代码而庞大的简单工厂类,拆分成了一个个的工厂类,这样代码就不会耦合在一个类中.
创建Phone和PhoneFactory
package FactoryDemo.FactoryMethod;
/**
* 定义实现手机接口
*/
public interface Phone {
/**
* 定义手机的功能方法
*/
public void call();
}
## PhoneFactory
package FactoryDemo.FactoryMethod;
public interface PhoneFactory {
// 创建手机工厂代加工类,让各个手机的工厂实现该方法
Phone createPhone();
}
工厂方式实现类
package FactoryDemo.FactoryMethod;
public class Huawei implements Phone
// 实现手机接口类
@Override
public void call() {
System.out.println("我是工厂模式创建的华为手机...");
}
}
package FactoryDemo.FactoryMethod;
// 注意实现PhoneFactory的create的方式实现类
public class HuaweiFactory implements PhoneFactory {
@Override
public Phone createPhone() {
return new Huawei();
}
}
抽象工厂模式
待更新...
网友评论