设计模式---工厂模式

在设计模式中,工厂模式可以大致分为三类:简单工厂模式工厂方法模式抽象工厂模式

 

1.简单工厂模式

1.1定义

简单工厂模式是由一个工厂对象根据收到的消息决定要创建哪一个类的对象实例。

 

1.2例子

/**
 * 形状接口,定义draw()方法
 */
public interface Shape {

    void draw();

}

 

/**
 * 圆形
 */
public class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("This is Circle: draw()...");
    }
}

 

/**
 * 矩形
 */
public class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("This is Rectangle: draw()...");
    }
}

 

/**
 * 正方形
 */
public class Square implements Shape {
    @Override
    public void draw() {
        System.out.println("This is Square: draw()...");
    }
}

 

/**
 * 简单工厂类
 */
public class ShapeFactory {

    public static Shape getShape(String shapeType) {
        if ("circle".equalsIgnoreCase(shapeType)) {
            return new Circle();
        } else if ("rectangle".equalsIgnoreCase(shapeType)) {
            return new Rectangle();
        } else if ("square".equalsIgnoreCase(shapeType)) {
            return new Square();
        }

        return null;
    }

}

 

public class SimpleFactoryDemo {

    public static void main(String[] args) {
        Shape circle = ShapeFactory.getShape("circle");
        circle.draw();
        Shape rectangle = ShapeFactory.getShape("rectangle");
        rectangle.draw();
        Shape square = ShapeFactory.getShape("square");
        square.draw();
    }

}

 

2.工厂方法模式

2.1定义

提供一个用于创建对象的接口(工厂接口),让其实现类(工厂实现类)决定实例化哪一个类(产品类),并且由该实现类创建对应类的实例。

 

2.2例子

/**
 * 工厂接口
 */
public interface ShapeFactory {

    Shape getShape();

}

 

/**
 * 圆形工厂类
 */
public class CircleFactory implements ShapeFactory {
    @Override
    public Shape getShape() {
        return new Circle();
    }
}

 

/**
 * 矩形工厂类
 */
public class RectangleFactory implements ShapeFactory {
    @Override
    public Shape getShape() {
        return new Rectangle();
    }
}

 

/**
 * 正方形工厂类
 */
public class SquareFactory implements ShapeFactory {
    @Override
    public Shape getShape() {
        return new Square();
    }
}

 

public class MethodFactoryDemo {

    public static void main(String[] args) {
        ShapeFactory circleFactory = new CircleFactory();
        Shape circle = circleFactory.getShape();
        circle.draw();

        ShapeFactory rectangleFactory = new RectangleFactory();
        Shape rectangle = rectangleFactory.getShape();
        rectangle.draw();

        ShapeFactory squareFactory = new SquareFactory();
        Shape square = squareFactory.getShape();
        square.draw();
    }

}

工厂方法模式与简单工厂模式的区别在于,工厂方法模式定义了一个工厂接口,所有的工厂类(子类)都继承此接口,程序需要指明具体工厂类并且创建来获取产品对象。

 

3.抽象工厂模式

3.1定义

抽象工厂是围绕一个超级工厂创建其他工厂,该超级工厂又称为其他工厂的工厂。提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。

 

3.2例子

添加颜色接口

/**
 * 颜色接口
 */
public interface Color {

    void fill();

}

 

/**
 * 红色
 */
public class Red implements Color {
    @Override
    public void fill() {
        System.out.println("This is Red: fill()...");
    }
}

 

/**
 * 绿色
 */
public class Green implements Color {
    @Override
    public void fill() {
        System.out.println("This is Green: fill()...");
    }
}

 

/**
 * 蓝色
 */
public class Blue implements Color {
    @Override
    public void fill() {
        System.out.println("This is Blue: fill()...");
    }
}

 

/**
 * 抽象工厂类
 */
public abstract class AbstractFactory {

    public abstract Color getColor(String colorType);
    public abstract Shape getShape(String shapeType) ;

}

 

/**
 * 形状工厂类
 */
public class ShapeFactory extends AbstractFactory {
    @Override
    public Color getColor(String colorType) {
        return null;
    }

    @Override
    public Shape getShape(String shapeType) {
        if ("circle".equalsIgnoreCase(shapeType)) {
            return new Circle();
        } else if ("rectangle".equalsIgnoreCase(shapeType)) {
            return new Rectangle();
        } else if ("square".equalsIgnoreCase(shapeType)) {
            return new Square();
        }

        return null;
    }
}

 

/**
 * 颜色工厂类
 */
public class ColorFactory extends AbstractFactory {
    @Override
    public Color getColor(String colorType) {
        if ("red".equalsIgnoreCase(colorType)) {
            return new Red();
        } else if ("green".equalsIgnoreCase(colorType)) {
            return new Green();
        } else if ("blue".equalsIgnoreCase(colorType)) {
            return new Blue();
        }

        return null;
    }

    @Override
    public Shape getShape(String shapeType) {
        return null;
    }
}

 

/**
 * 工厂创造器,用于获取特定工厂类
 */
public class FactoryProducer {

    public static AbstractFactory getFactory(String factoryType) {
        if ("shape".equalsIgnoreCase(factoryType)) {
            return new ShapeFactory();
        } else if ("color".equalsIgnoreCase(factoryType)) {
            return new ColorFactory();
        }

        return null;
    }

}

 

public class AbstractFactoryDemo {

    public static void main(String[] args) {
        AbstractFactory shapeFactory = FactoryProducer.getFactory("shape");
        Shape circle = shapeFactory.getShape("circle");
        circle.draw();

        AbstractFactory colorFactory = FactoryProducer.getFactory("color");
        Color red = colorFactory.getColor("red");
        red.fill();

    }

}

抽象工厂模式和工厂方法模式相似,只不过抽象工厂更加强调父类工厂(超级工厂),通过父类工厂来获取特定子类工厂,再得到产品对象。

使用Armbian安装OpenWrt是可能的,但需要一些额外的步骤和准备工作。 首先,确保你的设备兼容ArmbianOpenWrtArmbian是一个适用于ARM架构的开源操作系统,OpenWrt是一种支持嵌入式设备的Linux操作系统。你需要在设备的官方网站上查找信息,确认是否有ArmbianOpenWrt的支持。 一旦确认设备兼容,你可以开始准备安装。首先,下载Armbian操作系统的最新版本,并将其写入SD卡或USB设备中。接下来,将SD卡或USB设备插入到你的设备上,并启动设备。 一旦设备启动,你需要登录到Armbian系统中。你可以使用SSH等工具登录到设备的控制台。 在控制台上,你需要下载OpenWrt安装包。你可以在OpenWrt官方网站上找到最新的可用版本。确保选择与你的设备相匹配的安装包。 下载安装包后,你需要将其上传到你的设备中。可以使用SCP等工具来进行上传。 一旦安装包上传完成,你需要解压安装包并运行安装命令。不同的设备可能会有不同的安装命令,所以你可能需要查阅OpenWrt文档或设备的官方网站来获取准确的安装步骤。 安装过程完成后,你应该能够在Armbian中看到OpenWrt的界面。你现在可以通过浏览器登录到OpenWrt,并进行相应的设置和配置。 需要注意的是,安装过程可能会有一些具体的差异,具体取决于你使用的设备和版本。在进行任何操作之前,最好先查阅相关的文档和指南,以确保正确和顺利地完成安装过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值