工厂模式
工厂模式是java中最常用的设计模式,主要是用来完成对象的创建,使得对象创建过程和对象使用过程分离。 简单来说是取消对象创建者和使用者的耦合,简化new 对象的创建。
优势 :对象的属性创建完整。
缺点: 创建的类太多容易使开发者混乱。
举例:去商场买手机不用关心手机的零件是如何组装的,只用关注手机牌子。
ps:接口是工厂模式的最终目,重点关注接口。
工厂模式分为:
1.简单工厂模式:
简单工厂模式不是一个正式的设计模式,但它是工厂模式的基础。它使用一个单独的工厂类来创建不同的对象,根据传入的参数决定创建哪种类型的对象。
手机接口:
public interface Phone {
void getBrand();
}
小米手机类
public class XiaoMi implements Phone {
@Override
public void getBrand() {
System.out.println("小米");
}
}
华为手机类
public class HuaWei implements Phone {
@Override
public void getBrand() {
System.out.println("华为");
}
}
手机factory类
public class PhoneFactory{
public static Phone getPhone(String phone){
if("小米".equals(phone)){
return new Xiaomi();
}else if ("华为".equals(phone)){
return new Meizu();
}else {
return null;
}
}
}
Customer 消费者类
public class Customer {
public static void main(String[] args) {
PhoneFactory.getPhone("Xiaomi").getBrand();
PhoneFactory.getPhone("Meizu").getBrand();
}
}
2.工厂方法模式:
工厂方法模式定义了一个创建对象的接口,但由子类决定实例化哪个类。工厂方法将对象的创建延迟到子类。
手机接口:
public interface Phone {
void getBrand();
}
手机工厂接口
public interface PhoneFactory {
Phone getPhone();
}
小米手机类
public class XiaoMi implements Phone {
@Override
public void getBrand() {
System.out.println("小米");
}
}
华为手机类
public class HuaWei implements Phone {
@Override
public void getBrand() {
System.out.println("华为");
}
}
小米工厂类
public class XiaomiFactory implements PhoneFactory {
@Override
public Phone getPhone() {
return new Xiaomi();
}
}
华为工厂类
public class HuaWeiFactory implements PhoneFactory {
@Override
public Phone getPhone() {
return new HuaWei();
}
}
消费者类:
public class Customer {
public static void main(String[] args) {
Phone xiaomi = new XiaomiFactory().getPhone();
Phone meizu = new MeizuFactory().getPhone();
xiaomi.getBrand();
meizu.getBrand();
}
}
3.抽象工厂模式:
抽象工厂模式提供一个创建一系列相关或互相依赖对象的接口,而无需指定它们具体的类。