抽象工厂实例理解
发布日期:2022-02-17 02:39:50 浏览次数:29 分类:技术文章

本文共 3315 字,大约阅读时间需要 11 分钟。

博客1-抽象工厂

前两天在卓音工作室的培训班学习了抽象工厂在这里浅浅谈一下自己对抽象工厂的认识和理解,有不对欢迎大家马上指出问题。

抽象工厂就是一种多态的实现方式,也是一种设计思想。

但是在谈谈抽象工厂之前,先来谈谈简单工厂。
比如你想写一个类 这个类是青蛙 又写一个青蛙运动的方法 然后你又想写个类鱼 以及鱼运动的方法 …
在我们没学会继承和接口的时候 你大概会怎么写

public class Fish {    public void Move(){        System.out.println("我在水中游");    }}
public class qingWa {    public void Move(){        System.out.println("我在水中蛙泳");    }}

这样设计难免耦合度太高

所以我们就会用到接口

这样我们就把运动方式拿了出来 更利于修改。

public interface Go {    public void Move();}
public class qingWa implements Go{    public void Move(){        System.out.println("我在水中蛙泳");    }}
public class Fish implements Go{    public void Move(){        System.out.println("我在水中游");    }}

但是如果我们要将他们实例化

public class Main {    public static void main(String[] args) {        Go a = new qingWa();        Go b = new Fish();        a.Move();        b.Move();    }}

等于有多少动物我就new多少出来 。

那我们有什么改进的地方呢?

通过先实例化一个animalInWater调用里面的方法回到你要的类里面不就大功告成了

public class animalInWater {        public Go createFish(){            return new Fish();        }        public Go createqingWa(){            return new qingWa();        }}

每次修改我只用改后面的create(巴啦巴拉)

这就形成了我们的简单工厂

public class Main {    public static void main(String[] args) {        Go a = new animalInWater().createFish();        Go b = new animalInWater().createqingWa();        a.Move();        b.Move();    }}

—————————————————————————————

但这个时候还有没有改进的方法呢

使用简单工厂 我万一想增加一个类我岂不是还要跑到animalInWater里面再去写,那不是耦合度又高了起来

于是我们就把qingWa的拿出来 Fish的拿出来自己单独设置一个工厂 我万一想新增加一个类我就可以直接搞一个工厂出来 是不是耦合度一下只又降低了

public class Fishfactory {    public Fish createFish(){        return new Fish();    }}
public class qingWafactory {    public qingWa createqingWa(){        return new qingWa();    }}

一下子就更加的模块化了


可我这个时候突然来到了异世界 在我的这个异世界里 奇怪青蛙是飞的 奇怪鱼是跑的那这个时候怎么办呢?我已经不属于你原来的工厂了

这个时候抽象工厂就大放异彩了。

我们将正常的鱼和青蛙放在正常世界里面 奇怪的青蛙和奇怪的鱼放在奇异的时间里面,但是你又不可否认 奇异的青蛙就不是青蛙了吗(蜗牛不是牛吗 手动滑稽)

我们先写两个青蛙和鱼的接口。

public interface Fish {    public void FishGo();}
public interface qingWa {    public void qingWaGo();}

然后是不同世界的鱼和青蛙

public class FishInStrange implements Fish{    @Override    public void FishGo() {        System.out.println("我鱼在天上飞");    }}
public class FishInNormal implements Fish{    @Override    public void FishGo() {        System.out.println("我鱼在水中游");    }}
public class qingWaInNormal implements qingWa{    public void qingWaGo(){        System.out.println("我蛙在水中蛙泳");    }}
public class qingWaInStrange implements qingWa{    public void qingWaGo(){        System.out.println("我蛙在天上飞");    }}

以及他们的世界

public class normalWorld extends world{    @Override    public Fish createFish() {        return new FishInNormal();    }    @Override    public qingWa createqingWa() {        return new qingWaInNormal();    }}
public class strangeWorld extends world{    @Override    public qingWa createqingWa() {        return new qingWaInStrange();    }    @Override    public Fish createFish() {        return new FishInStrange();    }}

不会真有人以为奇怪的世界和正常的世界就不是世界了吧那自然就有所有世界

abstract public class world {   abstract public Fish createFish();   abstract public qingWa createqingWa();}

所以还有Main方法

每次只用改变世界就可以调用哪个世界的青蛙和鱼了

public class Main {    public static void main(String[] args) {        world a = new normalWorld();        Fish fish = a.createFish();        qingWa qingwawa = a.createqingWa();        fish.FishGo();        qingwawa.qingWaGo();    }}

第一次写博客 写的很蹩脚。

转载地址:https://blog.csdn.net/qq_39814938/article/details/106063355 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:C/C++整理
下一篇:博客2-部分容器以及泛型

发表评论

最新留言

不错!
[***.144.177.141]2024年04月16日 21时42分54秒