设计模式-创建型模式-工厂模式(工厂三兄弟)

简介:

设计模式-创建型模式-工厂模式(工厂三兄弟)
工厂模式分为简单工厂,工厂方法,抽象工厂。

简单工厂模式

一个接口,三个具体类,一个工厂,通过选择,生产出对应的对象。

package demo2;

public class Circle implements Shape{
    public Circle() {
        
    }

    @Override
    public void draw() {        
    }
    
}
package demo2;

public class Rectangle implements Shape{
    public Rectangle() {
        
    }
    
    @Override
    public void draw() {        
    }

}
package demo2;

public interface Shape {
    void draw();
}
package demo2;

public class ShapeFactory {
    public static Shape getShape(String shapeType) {
        if(shapeType == null) {
            return null;
        }
        
        if (shapeType == "Circle") {
            return new Circle();
        }
        
        if (shapeType == "Rectangle") {
            return new Rectangle();
        }
        
        if (shapeType == "Square") {
            return new Square();
        }
        return null;
    }
}
package demo2;

public class Square implements Shape{
    public Square() {
        
    }

    @Override
    public void draw() {        
    }
}
package demo2;

public class Test {
    public static void main(String[] agrs) {
        Shape circle = new ShapeFactory().getShape("Circle");
        circle.draw();
    }
}

利用反射改进工厂模式

由于违反开放-封闭原则,每次都要去修改源代码,所以直接使用反射机制。
将类传入,使用泛型+反射,生产出对象。

package demo2;

public class ShapeFactory2 {
    @SuppressWarnings("deprecation")
    public static Object getClass(Class<? extends Shape> clazz) {    // 代表通配的是Shape的子类,即都为借口的子类
        Object obj = null;
        
            try {
                obj = Class.forName(clazz.getName()).newInstance();
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        return obj;
        
    }
}
package demo2;

public class Test {
    public static void main(String[] agrs) {
        Shape circle = (Circle)ShapeFactory2.getClass(Circle.class);
        circle.draw();
    }
}

工厂方法

每个对象有对应的工厂,将原先的工厂拆分。

package demo2;

public class CircleFactory implements Factory{

    @Override
    public Shape getShape() {
        return new Circle();
    }

}
package demo2;

public class RectangleFactory implements Factory{

    @Override
    public Shape getShape() {
        return new Rectangle();
    }

}
package demo2;

public class SquareFactory implements Factory{

    @Override
    public Shape getShape() {
        return new Square();
    }

}
package demo2;

public class Test {
    public static void main(String[] agrs) {
        Factory circleFactory = new CircleFactory();
        Shape circle = circleFactory.getShape();
        circle.draw();
    }
}

抽象工厂

两个抽象接口,一个为产品,一个为工厂,进行生产

产品

public interface Gun{
    public void shooting();
}

子弹

public interface Bullet{
    public void load();
}

ak类

public class AK implements Gun{
    @Override
    public void shooting(){};
}

对应子弹

public class AK_Bullet implements Bullet{
    @Override
    public void load(){};
}

m4

public class M4 implements Gun{
    @Override
    public void shooting(){};
}

对应子弹

public class M4_Bullet implements Bullet{
    @Override
    public void load(){};
}

工厂

public interface Factory{
    public Gun produceGun();
    public Bullet produceBullet();
}

具体工厂
ak

public class AK_Factory implements Factory {
    @Override
    public Gun produceGun(){
        return new AK();
    }
    @Override
    public Bullet produceBullet(){
        return new AK_Bullete();
    }
}

M4

public class M4_Factory implements Factory{
    @Override
    public Gun produceGun(){
        return new M4();
    }
    @Override
    public Bullet produceBullet(){
        return new M4_Bullet();
    }
}

www.iming.info

目录
相关文章
|
22小时前
|
设计模式 测试技术
【设计模式系列笔记】工厂模式
工厂模式是一种创建型设计模式,其主要目的是将对象的创建过程抽象出来,以便在需要的时候由子类来实现。这种模式提供了一种方法,通过调用一个共同的接口来创建一组相关或依赖的对象,而无需指定其具体的类。
119 4
|
22小时前
|
设计模式 Java
设计模式之工厂
设计模式之工厂
|
22小时前
|
设计模式 安全 Java
【设计模式学习】单例模式和工厂模式
【设计模式学习】单例模式和工厂模式
|
22小时前
|
设计模式 Java
Java 设计模式:工厂模式与抽象工厂模式的解析与应用
【4月更文挑战第27天】设计模式是软件开发中用于解决常见问题的典型解决方案。在 Java 中,工厂模式和抽象工厂模式是创建型模式中非常核心的模式,它们主要用于对象的创建,有助于增加程序的灵活性和扩展性。本博客将详细介绍这两种模式的概念、区别以及如何在实际项目中应用这些模式。
17 1
|
22小时前
|
设计模式 存储 JavaScript
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
|
22小时前
|
设计模式 Java Go
[设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式
[设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式
|
22小时前
|
设计模式 关系型数据库 数据库
【C++ 设计模式 工厂模式对比】深入探索设计模式:工厂方法与抽象工厂的比较与对照
【C++ 设计模式 工厂模式对比】深入探索设计模式:工厂方法与抽象工厂的比较与对照
22 1
|
22小时前
|
设计模式 算法 安全
Java设计模式---创建型模式
Java设计模式---创建型模式
|
22小时前
|
设计模式 存储 安全
【设计模式】创建型模式之单例模式(Golang实现)
【2月更文挑战第3天】一个类只允许创建一个对象或实例,而且自行实例化并向整个系统提供该实例,这个类就是一个单例类,它提供全局访问的方法。这种设计模式叫单例设计模式,简称单例模式。
37 1
|
22小时前
|
设计模式 Java 关系型数据库
Java设计模式--创建模式工厂--用披萨订购案例 详细讲解三种工厂模式
Java设计模式--创建模式工厂--用披萨订购案例 详细讲解三种工厂模式

热门文章

最新文章