⭐简单说两句⭐
作者:后端小知识
CSDN个人主页:后端小知识
GZH:
后端小知识
欢迎关注点赞收藏⭐️留言
抽象工厂是指当有多个抽象角色时使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体情况下,创建多个产品族中的产品对象。
抽象产品
具体产品
抽象工厂
具体工厂
小米工厂生产小米手机和小米电脑
Vivo工厂生产Vivo手机和Vivo电脑
我们先假设下我们用工厂方法模式写的话,类图是什么呢?
那我们用工厂方法又是什么样的类图呢?
:我们可以很明显的看出这个类比上面工厂方法的类少,这个也算是一个优点了
代码
先来回顾下问题:
小米工厂生产小米手机和小米电脑
Vivo工厂生产Vivo手机和Vivo电脑
【Tpis】: 可以着重看下类图
编写顺序
Mobile > MiMobile > VivoMobile
Computer > MiComputer > VivoComputer
Factory > MiFactory > VivoFactory
Mobile.java
public interface Mobile {
//打电话
void call();
}
MiMobile.java
public class MiMobile implements Mobile {
@Override
public void call() {
System.out.println("我的小米");
}
}
VivoMobile.java
public class VivoMobile implements Mobile {
@Override
public void call() {
System.out.println("我的vivo");
}
}
Computer.java
public interface Computer {
//工作
void work();
}
MiComputer.java
public class MiComputer implements Computer {
@Override
public void work() {
System.out.println("小米电脑");
}
}
VivoComputer.java
public class VivoComputer implements Computer {
@Override
public void work() {
System.out.println("vivo电脑");
}
}
Factory.java
public interface Factory {
Mobile getMobile();
Computer getComputer();
}
MiFactory.java
public class MiFactory implements Factory {
@Override
public Mobile getMobile() {
return new MiMobile();
}
@Override
public Computer getComputer() {
return new MiComputer();
}
}
VivoFactory.java
public class VivoFactory implements Factory {
@Override
public Mobile getMobile() {
return new VivoMobile();
}
@Override
public Computer getComputer() {
return new VivoComputer();
}
}
Client.java
public class Client {
private static void useProduct(Factory factory){
factory.getComputer().work();
factory.getMobile().call();
}
public static void main(String[] args) {
useProduct(new VivoFactory());
System.out.println("==============");
useProduct(new MiFactory());
}
}
结果
仍然有简单工厂和工厂方法的优点
抽象工厂把工厂类的数量减少了,无论有多少个产品等级,工厂就一套
当产品等级发生变化时,都要引起所有以前工厂代码的修改,比如我们要添加个 生产相机 ,那么Factory
里面的代码就得改,那么所有的具体工厂都得改,违反了开闭原则
当产品等级比较固定时,可以考虑用抽象工厂
若产品等级经常变化,则不建议使用抽象工厂
【都看到这了,点点赞点点关注呗,爱你们】
结语
谢谢你的阅读
,由于作者水平有限,难免有不足之处,若读者发现问题,还请批评,在留言区留言或者私信告知,我一定会尽快修改的。若各位大佬有什么好的解法,或者有意义的解法都可以在评论区展示额,万分谢谢。
写作不易,望各位老板点点赞,加个关注!
作者:后端小知识
CSDN个人主页:后端小知识
GZH:后端小知识
欢迎关注点赞收藏⭐️留言