28.设计模式(工厂、装饰)详解

目录

一.工厂设计模式

1.1 工厂设计模式的作用

1.2 案例

二.装饰设计模式

2.1 装饰设计模式的作用

2.2 步骤

2.3 案例


一.工厂设计模式

1.1 工厂设计模式的作用

1.对象通过工厂的方法创建返回,工厂的方法可以为该对象进行加工和数据注入。
2.可以实现类与类之间的解耦操作。

1.2 案例

创建一个工厂用于产生需要的对象
工厂代码:
public class FactoryPattern {
    /**
       定义一个方法,创建对象返回
     */
    public static Computer createComputer(String info){
        switch (info){
            case "huawei":
                Computer c = new Huawei();
                c.setName("huawei pro 16");
                c.setPrice(5999);
                return c;
            case "mac":
                Computer c2 = new Mac();
                c2.setName("MacBook pro");
                c2.setPrice(11999);
                return c2;
            default:
                return null;
        }
    }
}
测试代码:
public class FactoryDemo {
    public static void main(String[] args) {
        Computer c1 = FactoryPattern.createComputer("huawei");
        c1.start();

        Computer c2 = FactoryPattern.createComputer("mac");
        c2.start();
    }
}

二.装饰设计模式

2.1 装饰设计模式的作用

装饰模式是指创建一个新类,用来包装原始类,从而在新类中提升原来类的功能。

2.2 步骤

1. 定义父类
2. 定义原始类,继承父类,定义功能
3. 定义装饰类,继承父类,包装原始类,增强功能

2.3 案例

需求:模拟Stream流
//父类代码:
public abstract class InputStream {
    public abstract int read();
    public abstract int read(byte[] buffer);
}
//原始类代码:
public class FileInputStream extends InputStream{
    @Override
    public int read() {
        System.out.println("低性能的方式读取了一个字节a");
        return 97;
    }

    @Override
    public int read(byte[] buffer) {
        buffer[0] = 97;
        buffer[1] = 98;
        buffer[2] = 99;
        System.out.println("低性能的方式读取了一个字节数组:" + Arrays.toString(buffer));
        return 3;
    }
}
//装饰类代码:
public class BufferedInputStream extends InputStream{
    private InputStream is;
    public BufferedInputStream(InputStream is){
        this.is = is;
    }
    @Override
    public int read() {
        System.out.println("提供8KB的缓冲区,提高读数据性能~~~~");
        return is.read();
    }

    @Override
    public int read(byte[] buffer) {
        System.out.println("提供8KB的缓冲区,提高读数据性能~~~~");
        return is.read(buffer);
    }
}
//测试类代码:
public class DecoratorPattern {
    public static void main(String[] args) {
        InputStream is = new BufferedInputStream(new FileInputStream());
        System.out.println(is.read());
        System.out.println(is.read(new byte[3]));
    }
}

你可能感兴趣的:(Java,SE,java,开发语言)